twoSum함수에 숫자 리스트와 '특정 수'를 인자로 넘기면,더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열
예를 들어,
nums은 [4, 9, 11, 14], target은 13
nums[0] + nums[1] = 4 + 9 = 13 이죠?
그러면 [0, 1]이 return 되어야 합니다.
가정) target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다고 가정하겠습니다.
def two_sum(nums, target):
current = 0
for i in range(len(nums)):
for j in range(current+1, len(nums)):
result = nums[current]+nums[j]
if result == target:
return [current, j]
break
current += 1
나는 이중 for문을 사용해서 currnet index를 기준으로 current index 다음부터 list의 끝까지 각각 더해서 정답을 찾도록 코드를 짰다.
def two_sum(nums, target):
index_map = {}
for i in range(len(nums)):
num = nums[i]
pair = target - num
if pair in index_map:
return [index_map[pair], i]
index_map[num] = i
return None
이중 for문을 안쓸수록 좋다는건 알지만 이중 for문으로 문제를 풀던 습관들이 있어서 약간 복잡하다고 문제를보면 이중 for문으로 풀어나가게 된다. 하지만 model solution을 보면 이중 for문을 사용하지 않고 for문을 돌면서 짝이 없으면 dict 형식으로 저장해두었다가 나중에 짝을 그 dictionary에서 찾는다. dictionary의 좋은 점은 key와 value로 두 개의 값을 저장할 수 있다는 점이다. 나도 앞으로 이중 for문 대신 dict 형식을 사용해보도록 노력해야겠다.