Code Kata(Python) - Week 1

JM·2020년 6월 8일
0

Code_kata

목록 보기
1/3

문제

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개 밖에 없다고 가정하겠습니다.

내가 시도한 방법

nums라는 숫자 배열에서 첫 번째 숫자 (nums[0])을 기준 숫자로 정한 뒤, 기준 숫자를 다른 배열의 숫자들과 더해보고 만약 target 넘버와 맞는다면 return 값으로 해당 숫자의 인덱스 값을 반환하려 하였다. 하지만 반복문에서 다른 인덱스 넘버의 숫자와 비교하는 부분에서 막혔다. 내가 놓친 부분은 for 문에 변수를 넣는다는 부분이다. for 문의 변수를 그저 순서(index)값으로 생각하니 막히는 부분도 생긴듯하다.

해결 방법 1

재준님의 방법인데 너무 간단하고 좋은 방법인듯하다.
타겟넘버에서 특정한 수(제공되는 숫자 배열내)를 빼서 나머지값과 동일한 숫자를 배열내에서 찾는 방법이다.

def two_sum(nums, target):
  for num1 in nums :
    num2 = target-num1
    if num2 in nums 
      return [nums.index(num1),nums.index(num2)]

해결 방법 2

이중 for 문을 사용하여 배열 내의 숫자들과 비교를 한다.
반복 중에 타깃 넘버와 합이 같아지는 숫자들의 인덱스를 return 한다

해결 방법 3

배열의 인덱스를 랜덤 함수로 돌려 두 랜덤 수의 합이 타깃 넘버가 될 때까지 무한 반복을 하는 방법. 이 방법은 성능이 너무 떨어질듯하여 생각을 접었다.

0개의 댓글