코드카타 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문으로 돌리면 자기자신끼리 더한값과 반복된값이 생겨서 비효율적이다.(딕셔너리를 활용했어야한다!)
Author And Source
이 문제에 관하여(코드카타 Week1-Day1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gigymi2005/코드카타-Week1-Day1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)