two_sum함수에 숫자 리스트와 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.
문제 : 리스트에서 두 값의 합이 특정 조건을 만족하는 경우를 찾고, 그 순서값을 반환해라.
조건 : target
으로 보내는 합계의 조합은 배열 전체 중에 2
개 밖에 없다고 가정하겠습니다.
인풋 : 리스트와 특정 수
아웃풋 : 더해서 특정 수가 되는 두 요소의 index(리스트)
index
를 쓰거나, 처음부터 range
함수로 iterate해야 한다.def two_sum(nums, target):
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
print(i, j)
if nums[i] + nums[j] == target:
return [i, j]
def two_sum(nums, target):
for i in nums:
for j in nums:
print(i, j)
if i + j == target:
return [nums.index(i), nums.index(j)]
문제에서 요구하는 것에만 집중한다면, 반복문을 2개 쓰는 대신에 각각을 target
에서 뺀 값을 리스트에서 찾는 것이 더 효율적이다. (과연 효율적인가? 그건 더 알아봐야겠다.)
def two_sum(nums, target):
for i in range(len(nums)):
print([4, 9, 11, 14].count(target - nums[i]))
remain = target - nums[i]
if nums.count(remain):
return [i, nums.index(remain)]
def two_sum(nums, target):
seen = {}
for i, num in enumerate(nums):
if target - num in seen:
return [i, seen[target - num]]
else:
seen[num] = i