[CodeKata]1

yejin20·2020년 10월 5일
0

CodeKata

목록 보기
1/1

1. 문제

two_sum함수에 숫자 리스트와 '특정 수'를 인자로 넘기면,더해서 '특정 수'가 나오는 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개 밖에 없다고 가정하겠습니다.


2. 풀이

1) 코드카타 짝꿍님과 풀었던 코드 -list index 사용

def two_sum(nums, target):
  n = len(nums)                         # len(nums)는 숫자배열의 길이
  
  for i in range(n) :                   # 0부터 n-1개까지 range
    for j in range(i+1, n) :
      if nums[i] + nums[j] == target :
        return [i, j]

nums = [4,9,11,14]                      # test해보려고 쓴 것
target = 13                             # test해보려고 쓴 것

2) 짝꿍님이 말씀해주셨던 딕셔너리로 푸는 방법

nums = [4,9,11,14]                      # 예시 nums 배열
target = 13                             # 예시 target 배열
dic = {}                                # 빈 딕셔너리 { } 생성

for i in range(len(nums)):              # 딕셔너리에 키와 값 입력(키:리스트값, 값: 인덱스)
	dic[nums[i]] = i
      
def twoSum (nums, target) :             # def twoSum 함수
  for i in range(len(nums)):
    val = nums[i]
    findVal = target - nums[i]
    if dic[findVal]:
      return [dic[nums[i]], dic[findVal]]
      
print(twoSum(nums, target))

3) 맞은편 짝꿍님이 말씀해주셨던 또 다른 방법


def two_sum(nums, target):
	for i in range(len(nums)):
	  other_num = target - nums[i]     
	  if other_num in nums:
	    return [i, nums.index(other_num)]

other_num을 만들어서 target - nums[i]로 접근하는게 너무 신선했다...!

profile
개(발자 어)린이입니다

0개의 댓글