반응형

1. 문제

  매우 유명한 (알고리즘 풀이 입문 시 자주 맞닥뜨리는) 문제이다.

정수들이 담긴 배열 nums와 목표 target이 주어질 때, 배열 nums 내의 특정 두 수의 합은 target이 된다.

해당 두 수의 index를 return해라.

 

2. 풀이

  2가지 풀이 방법으로 풀어보자.

 

  1) Two Pointer : 두개의 포인터를 가지고 배열을 탐색하는 기법이다.         a. 배열을 오름차순으로 정렬한다. 이 때, 기존 idx를 보존할 수 있도록 [num, idx] 형태로 저장 후 정렬한다.     b. 두개의 포인터(left = 0, right = len(nums)-1)를 만들고 합(nums[left][0] + nums[left][1])을 구한다.     c. (반복) 합이 target보다 작은 경우 left를 오른쪽으로 한칸, 클 경우에는 right를 왼쪽으로 한칸 이동시킨다.     d. 합이 target과 일치하면, 두 수의 idx를 반환한다.

 

  시간 복잡도 : O(nlogn)

  공간 복잡도 : O(1)

 

  2) Hash Map :  배열을 순차적으로 탐색하며 확인한 내용을 해시 맵에 기록한다. Two Pointer 보다 속도가 빠르지만, 메모리를 추가적으로 사용한다.

 

    a. nums를 순차적으로 탐색하며 아래의 과정을 수행한다.      탐색 과정의 정수 : num      a-1) Hash Map의 key들 중 num이 있는지 확인한다.      a-2) 있다면 해당 key의 value와 num의 idx를 return하고, 없다면 Hash Map에 key : target - num. value : idx 로 기록한다.          시간 복잡도 : O(n)    공간 복잡도 : O(n)

반응형

'Computer Science > 알고리즘' 카테고리의 다른 글

[알고리즘 풀이 방식] 시작  (0) 2022.01.09
[LeetCode] 1669. Merge In Between Linked Lists  (0) 2021.10.29
알고리즘 - Search  (0) 2021.04.21
Dynamic Programming  (0) 2021.01.21
위상 정렬(Topological Sort)  (0) 2020.12.29

+ Recent posts