[Q7] 두 수의 합

2022. 12. 17. 13:50·코딩테스트/알고리즘

[리트코드 1] Two Sum

덧셈하여 타겟을 만들 수 있는 배열의 두 숫자 인덱스를 리턴하라.

 

처음 이 문제를 보았을 때, 나는 모든 경우의 수를 다 비교해가며 정답을 도출했었다.

 

하지만, 코테 볼 때 항상 효율성에서 틀려버린 경험을 바탕으로 책을 읽어보니 매우 효율적인 방법이 있음을 알 수 있었다.

 

먼저, 다음과 같은 배열이 있다고 가정하자.

nums = [1, 3, 6, 8, 5]

 

이 배열에서 숫자 6의 위치를 찾는 방법은 find 함수를 사용하는 것이다. 하지만 이는 시간복잡도가 O(n)이다.

 

하지만, 다음과 같이 배열의 인덱스와 숫자를 딕셔너리로 구현하여 참조하면 시간복잡도를 O(1)로 줄일 수 있다.

nums_dict = {}

for i, num in enumerate(nums):
	nums_dict[num] = i

 

이제 문제를 풀어보자.

def twoSum(self, nums: List[int], target: int) -> List[int]:

    nums_dict = {}

    for i in range(len(nums)):
        nums_dict[nums[i]] = i

    for i, num in enumerate(nums):
        if target - num in nums_dict and i != nums_dict[target-num]:
            return [i, nums_dict[target-num]]

 

nums 배열을 순회하며,

target에서 해당 인덱스의 숫자를 뺐을 때 그 수가 nums_dict의 key값으로 존재하고 그 인덱스가 현재 인덱스와 같이 않을 때

정답을 반환하는 것이다.

 

위에 코드에서 만약 target-num의 값이 리스트에 있는지 확인하기 위해 find 함수를 사용했다면 시간 복잡도가 O(n)이 소모되지만,

리스트를 딕셔너리 형태로 바꾼 뒤 값을 찾으면 시간복잡도를 O(1)로 줄일 수 있다.

저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 알고리즘' 카테고리의 다른 글

[Q. 02] 문자열 뒤집기  (0) 2023.03.15
[Q. 01] 유효한 팰린드롬  (0) 2023.03.15
[Q6] 가장 긴 팰린드롬 부분 문자열  (0) 2022.12.01
[Q4] 가장 흔한 단어  (0) 2022.12.01
[Q3] 로그파일 재정렬  (0) 2022.12.01
'코딩테스트/알고리즘' 카테고리의 다른 글
  • [Q. 02] 문자열 뒤집기
  • [Q. 01] 유효한 팰린드롬
  • [Q6] 가장 긴 팰린드롬 부분 문자열
  • [Q4] 가장 흔한 단어
뚝딱뚝딱2
뚝딱뚝딱2
  • 뚝딱뚝딱2
    개발도상국
    뚝딱뚝딱2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 공부
        • Java
        • Spring Boot
        • LORA
      • Web
        • 인스타 클론 코딩
        • GPT 응답 API 서버
        • Spring Boot 예외 처리
        • 코테 준비용 서비스 만들기
      • DevOps
        • 쿠버네티스
        • 서버 만들기
      • 코딩테스트
        • 알고리즘
      • 교육
        • 스파르타코딩클럽 - 내일배움단
        • 혼자 공부하는 컴퓨터 구조 운영체제
      • 잡다한것
  • 블로그 메뉴

    • 홈
  • 링크

    • GITHUB
  • 공지사항

  • 인기 글

  • 태그

    chat GPT
    티스토리챌린지
    스프링부트
    스프링 부트
    spring boot
    클러스터
    인스타그램
    백준
    OpenAI API
    Java
    오블완
    REST API
    Entity
    리액트
    mapstruct
    클론코딩
    예외
    react
    MSA
    쿠버네티스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
뚝딱뚝딱2
[Q7] 두 수의 합
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.