Two Sum
정수 목록과 목표값이 주어집니다. 목록에서 정확히 두 수의 합이 목표값이 되며, 여러분의 임무는 그 두 수가 있는 위치를 보고하는 것입니다.
nums = [3, 8, 12, 5]와 target = 17을 예로 들어 보겠습니다. 값 12는 인덱스 2에 있고 5는 인덱스 3에 있으며, 12 + 5 = 17이므로 답은 [2, 3]입니다.
두 수는 서로 다른 위치에서 가져와야 합니다. [4, 2, 6]에서 target = 8인 경우 4를 두 번 사용하는 것은 허용되지 않습니다. 2 + 6 = 8이므로 답은 [1, 2]입니다. 하지만 같은 값이 두 번 나타날 수는 있습니다. [7, 3, 7]에서 target = 14인 경우 답은 [0, 2]입니다.
twoSum이라는 이름의 함수를 작성하세요. 이 함수는 정수 배열 nums와 정수 target을 받아, nums[i] + nums[j]가 target과 같도록 하는 두 인덱스 [i, j]의 배열을 반환합니다.
인덱스는 서로 다른 두 위치여야 하며, 오름차순으로 반환해야 합니다(i가 j보다 작음). 모든 입력에는 이러한 쌍이 정확히 하나 있습니다.
제약 조건: 2 ≤ nums.length ≤ 10^4, -10^9 ≤ nums[i] ≤ 10^9, -10^9 ≤ target ≤ 10^9.
함수
- arg1integer-array
- arg2integer
- 반환값integer-array
예제
- 입력
- arg1 = [3, 8, 12, 5]arg2 = 17
- 출력
- [2, 3]
- 입력
- arg1 = [6, 1, 4, 10]arg2 = 7
- 출력
- [0, 1]
- 입력
- arg1 = [2, -6, 9, 4, 13]arg2 = 3
- 출력
- [1, 2]
제출 시 숨은 테스트 +13개
힌트
하나씩 열어 보세요. 열 때마다 조금 더 알려 줍니다.
두 개의 중첩 루프로 모든 쌍을 확인하는 방법은 맞지만, 숫자가 10,000개라면 약 5천만 번 확인해야 합니다. 목록을 다시 훑지 않고 각 숫자의 짝을 찾을 수 있을까요?
값
x에 서 있으면 쌍을 완성할 값이 무엇인지 이미 알고 있습니다. 바로 목표값에서x를 뺀 값입니다. 유일한 질문은 그 값을 이전에 지났는지, 그리고 어느 인덱스에 있는지입니다.목록을 한 번 순회하면서 지금까지 지나온 각 값과 그 인덱스를 해시 맵에 저장하세요. 각 위치에서 먼저 필요한 나머지 값을 찾아보세요. 해시 맵에 있다면 두 인덱스를 모두 찾은 것입니다. 없다면 현재 값을 저장하고 다음으로 넘어가세요. 저장하기 전에 먼저 찾아보면 숫자가 자기 자신과 짝을 이루는 일을 막을 수 있습니다.
이 문제의 전체 풀이가 곧 추가됩니다.
비슷한 문제
같은 아이디어를 쓰는 문제입니다. 두세 개를 풀면 패턴이 몸에 익습니다.
Python
def twoSum(nums, target):
# 여기에 코드를 작성하세요케이스 1
케이스 2
케이스 3
입력
arg1 = [3, 8, 12, 5] arg2 = 17
기대값
[2, 3]