""" 예시
nums은 [4, 9, 11, 14]
target은 13
nums[0] + nums[1] = 4 + 9 = 13
리턴 : [0, 1]
"""
def two_sum(nums, target):
combination = []
for i in range(len(nums)):
if nums[i] > target:
continue
for j in range(len(nums)):
if j < len(nums) - 1 and nums[i] + nums[j+1] == target:
combination.append(nums.index(nums[i]))
combination.append(nums.index(nums[j+1]))
return combination
nums = [1,2,3,4]
target = 6
print(two_sum(nums, target)) # [1, 3]
풀이 방식
1. target 은 두 값을 더했을 때 나오는 값이다. 또한 두 값에 0이 존재할 때, target 과 num[i] 가 같아 질 수 있기 때문에, num[i] 가 target 보다 클 때는 마이너스를 하지 않는 이상 값이 나올 수 없기 때문에,
num[i] > target 일 때 continue 를 걸어 반복문이 돌지 않게 하였다.
2. 이중 반복문을 돌려서 num[i] + num[j+1] == target 일 때 각 값의 인덱스를 구하여 배열에 넣고 리턴하게 하였다.
def two_sum(nums, target):
for i in nums:
temp = target - i
if temp in nums:
return [nums.index(i), nums.index(temp)]
nums = [1,2,3,4]
target = 6
print(two_sum(nums, target))
처음 문제를 접했을 때, 이중 반복문을 이용해서 값을 더해서 target 과 비교하는 방법을 생각했었는데, 그 방법은 배열이 길면 길어질수록 연산해야 하는 횟수가 배로 증가한다. a + b = target 이라는 것을 뒤집어서 taget - a = b 라는 발상을 하는 것이 중요하다고 느꼈다. 또한, 다른 사람의 답을 비교해보니 딕셔너리를 이용한 답이었는데, 그 편이 훨씬 파이썬 다운 코드라고 느꼈다.