코딩 테스트 공부

[leetcode를 풀어보자] python Two Sums

FlameFlower 2022. 1. 31. 19:11

이런 이중 for문을 풀 때 매번 하는 실수가 있어 그 부분부터 고쳐나가야 한다.

 

처음에 했던 말도 안되는 풀이:

class Solution:
	def twoSum(self, nums: List[int], target: int) -> List[int]:
    	for i in range(len(nums)-1):
        	if nums[i] + nums[i+1] == target:
            	return True

1. 우선 이중 포문을 활용하는 것에 대해 제대로 고려를 못함

2. return 값에 대해서 제대로 고려하지 않음......

 

제대로 된 이중 포문을 이용한 brute force 방법의 풀이는 다음과 같다.

from typing import List
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i, len(nums)):
                if nums[i] + nums[j] == target:
                    return [i, j]

 

leetcode의 특징이지만 follow-up 질문들이 사실 메인 질문인 경우가 많다.

사실 hashmap을 사용하지 않은 이중포문의 경우 알고리즘 복잡도가 O(n^2)에 비례하기 때문에 효율이 좋지 못하다. 이를 개선하기 위해서 dictionary 포맷이 필요하다.

 

from typing import List

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        values = {}
        for idx, value in enumerate(nums):
            if target - value in values:
                return [values[target-value], idx]
            else:
                values[value] = idx