본문 바로가기
Algorithm

Code Kata : day 1

by Adam92 2020. 6. 8.

오늘 처음으로 코드카타를 진행하였다.

 

문제는 이렇다 

 

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

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

---------------------------------

예를 들어,
nums은 [4, 9, 11, 14]
target은 13 

nums[0] + nums[1] = 4 + 9 = 13 이죠?

그러면 [0, 1]이 return 되어야 합니다.

 

한시간동안 고민했는데 나는 결국 풀지 못했다.

일단 첫번쨰로, 문제를 정확하게 이해하지 못했다. 리턴하는 값이 value가 아니라 index라는 점을 정확히 인지하지 못했고

두번째로 for문을 아직까지는 사용하는게 서툴럿고, 문제안에 있는 규칙을 읽지 못한 것같다. (pair = target - nums[x])

 

답은 대체로 2개 방법으로 풀 수있는 것 같다.

 

 

첫번째 방법은 중첩 for문을 이용해 index값을 리턴하는 것 (현랑님의 도움을 받았다)

 

def two_sum(nums, target):
	start = 0
	for i in range(0, len(nums)):
		 
		for j in range(start + 1, len(nums)):
			results = nums[start] + nums[j]
			if results == target:
				return [start, j]
				break
		start += 1

여기서 핵심은 변수 start인 것같다. start = 0을 주고 이너for문에서는 star +1부터 시작하여 결과값을 찾는 것이다.

 

 

 

 

두번째 방법은 모법 답안인데 ( pair = target - nums[x] ) 을 이용했다.

 

def two_sum(nums, target):
	index_map = {}
	for i in range(len(nums)):
		num = nums[i]
		pair = target - num
		if pair in index_map:
			return [index_map[pair], i]
		index_map[num] = i
	return None

빈 dict 리스트를 만들고 pair = target - num을 이용해서 문제를 푼 방식이고, 또하나 주목해야될점은 빈 dict 리스트를 이용해서 인덱스맵을 만들었다는 점인것 같다.

 

아직까지는 이렇게까지 나의 사고가 여기까진 닿진 않지만 조금씩조금씩 이해해가면서 사고를 넓혀나가야겠다.

'Algorithm' 카테고리의 다른 글

Python 문제  (0) 2020.06.05
Python - For Loops Assignment  (0) 2020.05.29