Code Kata | day1 two_sum

juri·2021년 7월 19일
0

Code Kata

목록 보기
1/15
post-thumbnail

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

nums = [4, 9, 11, 14]
target = 13
#1차 
def two_sum (nums, target) :
	for num in nums :
		if target - num in nums :
			break
	return [nums.index(num), nums.index(target-num)]

#2차
def two_sum2 (nums, target) :
	return [nums.index(x) for x in nums if target-x in nums]

☑️ 0차

처음에 문제를 딱 봤을 땐 이렇게 생각했다.
1) 두 개의 수를 더한 합계의 모든 경우의 수를 만든다.
2) target과 일치하는 경우를 찾는다.
3) 2의 인덱스를 반환한다.

이렇게 코드를 짜기 위해서는 컴퓨터가 모든 경우의 수를 계산해야하며, 1번을 수행하는 코드를 짜기 복잡하다. 또한, 인덱스를 반환하는데 있어 경우의 수에 있는 두 개의 수의 원래 인덱스를 다시 추적해야하는 과정이 필요하다. 결과적으로, 너무 복잡한 방법이라는 생각에 다른 방법을 시도해보기로 했다.

☑️ 1차

핵심내용은 '뺄셈'을 이용하는 것이다. target에서 리스트 안의 특정 수를 뺀 수가 리스트에 있으면 더했을 때 target이 되는 두 수가 리스트에 있는 것이다.
리스트안의 모든 수를 target과 계산하기 위해서 for 문을, 리스트 안에 특정 수가 존재하는 지 확인하기위해 if를 사용하기로 했다.
target을 만드는 조합은 1개라고 가정했기 때문에, if를 만족하는 경우가 있을 때 바로 for을 멈출 수 있도록 break를 사용했다.

☑️ 2차

target = a + b 라고 할 때, target-a = b target-b = a 의 두가지 식을 만족한다.
예를 들어 , 주어진 리스트에 [a , b , c , d]가 있다고 했을 때, if문의 조건인 target-atarget-b의 인덱스를 찾는 것과 ab 의 인덱스를 찾는 것은 동일하다.
즉, if문의 조건만 만족하면 nums.index(a)nums.index(target-a) 를 찾는 것이 아닌 nums.index(a)nums.idex(b)를 찾으면 되기때문에 for을 이용해 한 반복에서 두 개의 수의 인덱스를 구할 수 있으며 한 줄로 표현할 수 있다.

profile
Make my day !

0개의 댓글

관련 채용 정보