Python: Code Taka 1주차 1

pm1100tm·2020년 11월 2일
0

Code Taka

목록 보기
1/12

Q. two_sum함수에 숫자 리스트와 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return 하라.

  • nums: 숫자 배열
  • target: 두 수를 더해서 나올 수 있는 합계
  • return: 두 수의 index를 가진 숫자 배열
  • target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다고 가정한다.
""" 예시
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))
  1. 숫자 배열의 어느 값에서 (target - 값) 의 결과 값을 이용하는 방법이다.
    (target - 숫자 배열의 어느 값) + 숫자 배열의 다른 인덱스의 값 == target 과 같다.
  2. 그렇게 해서 target - 값 의 인덱스 값과, 다른 값의 인덱스 값을 뽑아서, 리스트에 넣고 바로 리턴하게 하였다.

후기

처음 문제를 접했을 때, 이중 반복문을 이용해서 값을 더해서 target 과 비교하는 방법을 생각했었는데, 그 방법은 배열이 길면 길어질수록 연산해야 하는 횟수가 배로 증가한다. a + b = target 이라는 것을 뒤집어서 taget - a = b 라는 발상을 하는 것이 중요하다고 느꼈다. 또한, 다른 사람의 답을 비교해보니 딕셔너리를 이용한 답이었는데, 그 편이 훨씬 파이썬 다운 코드라고 느꼈다.

profile
개발을 취미로 할 수 있는 그 때 까지

0개의 댓글