[Algorithm] 코드카타 - two_sum

haejun-kim·2020년 8월 4일

[Algorithm]

목록 보기
1/3

위코드에서 Pre course가 끝나고 3주차부터 Foundation Course가 시작됐다. 그리고 3주차부터 시작되는 코트카타를 시작하게 됐다. repl.it에서 파이썬 문제를 풀 때는 기본적인 문법 내용이라 그렇게 어렵다는 생각은 하지 않았으나, 막상 코드카타를 시작하니 뇌정지가 시작됐다.🤣

머릿속에서는 어떤식으로 풀면 되지 않을까? 라는 생각이 들었지만 그것을 코드로 옮기는게 그렇게 쉽지는 않더라. 결국 옆자리의 동호님이 먼저 푸시고 많이 도움을 주셔서 풀 수 있었다.

My Solution

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

먼저 규칙을 찾아보았다.

j\i 0 | 1 | 2 | 3

0 8 | 13 | 15 | 18

1 13 | 18 | 20 | 23

2 15 | 20 | 22 | 25

3 18 | 23 | 25 | 28

대각선을 기준으로 양쪽이 서로 대칭의 값을 갖더라. 그래서 i 가 j 보다 +1 큰 값으로 for loop을 적용하면 되겠다고 생각이 들었다. 그래서 위와 같은 코드를 짰는데, 이중for문 구조라 썩 좋아보이진 않는다.

Model Solution

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

모델 솔루션은 훨씬 섹시했다. 빈 딕셔너리를 만들고 그 딕셔너리의 값에서 비교를 하면서 있으면 출력 없으면 넘기는 식으로 풀어냈더라.

아직은 문제를 보고도 어떤식으로 풀어내야할지 감을 잡기가 어렵고, 머릿속으로는 이렇게 풀자! 생각이 드는데 막상 코드로 옮기기는 생각처럼 쉽지 않았다. 앞으로 많은 연습이 필요하겠다는 자기 반성을 하게 되었다.

0개의 댓글