인생은 고통의 연속

two sum 본문

프로그래밍/알고리즘

two sum

gnidoc 2021. 4. 22. 03:49
    반응형

    leetcode.com/problems/two-sum/

     

    Two Sum - LeetCode

    Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

    leetcode.com

     

    언제든 이직할 수 있도록 코딩테스트 연습하려고 leetcode에 가입했다

    그냥 제일 상위에 있는 문제 중 easy 난이도 하나를 골라서 풀었는데

    한번에 통과는 했지만 많은 반성을 하게 됐다...

    내 답은 이렇게 적었는데

    class Solution:
        def twoSum(self, nums: List[int], target: int) -> List[int]:
            results = []
            for i, first in enumerate(nums):
                for j, second in enumerate(nums):
                    if i == j:
                        continue
                    
                    if target == first + second:
                        return [i, j]
                    

     

    답지를 보고 나니 너무 부끄러운 코드다...

    진짜 생각없이 brute force로 풀었는데

    One/Two-pass Hash Table 답을 보면 참 현타 오는 코드다 ㅋㅋ

    // Two-pass Hash Table
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            map.put(nums[i], i);
        }
        for (int i = 0; i < nums.length; i++) {
            int complement = target - nums[i];
            if (map.containsKey(complement) && map.get(complement) != i) {
                return new int[] { i, map.get(complement) };
            }
        }
        throw new IllegalArgumentException("No two sum solution");
    }
    
    // One-pass Hash Table
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int complement = target - nums[i];
            if (map.containsKey(complement)) {
                return new int[] { map.get(complement), i };
            }
            map.put(nums[i], i);
        }
        throw new IllegalArgumentException("No two sum solution");
    }

                    

    혼자서 + 대충 일하던 습관이 그냥 몸에 베어버린 2중 for문...

    O(n)으로 풀 수 있는 답은 보니 내 O(n^2)은 완전 쓰레기가 되어렸다

    이건 알고리즘 문제니깐 좀 더 최적화 포인트를 생각해볼 수 있었는데

    많은 반성 포인트만을 남겨둔채 일단 통과... ㅋㅋㅋ

     

    매일까진 아니라도 최소한 일주일에 한문제는 풀어봐야겠다

    진짜 감 많이 잃었네...

    반응형

    '프로그래밍 > 알고리즘' 카테고리의 다른 글

    Merge Two Sorted Lists  (0) 2022.01.11
    Rearrange Spaces Between Words  (0) 2021.04.26
    11일차 리뷰  (0) 2019.02.13
    10일차 리뷰  (0) 2019.02.12
    9일차 리뷰  (0) 2019.02.08
    Comments