코드카타 Week1-Day1

문제

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

nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열

예를 들어,

ums은 [4, 9, 11, 14]
target은 13 

nums[0] + nums[1] = 4 + 9 = 13 이죠?
?
그러면 [0, 1]이 return 되어야 합니다.

target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다고 가정하겠습니다.


풀이

  • my solution
def two_sum(nums, target): 
  # 이중 for문을 사용
  for first_num in nums:            
    for second_num in nums:
      if (first_num + second_num) == target:
      	# 나온값들을 인덱스로 바꿔주고 리스트안에 넣음
        return [nums.index(first_num), nums.index(second_num)]   # 
      else:
        continue
  • model solution
def two_sum(nums, target):
	# 딕셔너리 생성
	index_map = {}
    	# 받아온 nums리스트의 개수만큼 인덱스출력
	for i in range(len(nums)):
		num = nums[i]  # num은 nums인덱스 값이다.
		pair = target - num  # 짝은 target - num 가 되어야한다.
		if pair in index_map: # 그 짝이 딕셔너리 안에 있으면
        		# 그짝의 인덱스와 원래 인덱스를 리스트에 담아서리턴
			return [index_map[pair], i] 
		index_map[num] = i   # 없으면 딕셔너리에 넣어라
	return None
  • code review
    • 이중 for문으로 돌리면 자기자신끼리 더한값과 반복된값이 생겨서 비효율적이다.(딕셔너리를 활용했어야한다!)

좋은 웹페이지 즐겨찾기