[LeetCode easy] Contains Duplicate JavaScript

IT공부중·2020년 4월 30일
0

알고리즘

목록 보기
21/49

https://leetcode.com/problems/contains-duplicate/submissions/

문제 설명

숫자의 배열이 주어진다. 그 배열 중에 중복 된게 있으면 true 없으면 false를 출력하라.

문제 풀이

어려운 문제는 아니지만 최대한 짧은 시간 복잡도로 푸는게 관건이다.
가장 쉬운 방법이라면 2중 for문으로 같은게 있는지 끝까지 계속 찾아보는 완전탐색 방법이 있을 것이다. 하지만 그렇게 하면 O(n2) 의 시간 복잡도를 갖는다.
sort를 한 다음 바로 옆과 같은지 확인을 해보는 방법도 있지만 그 방법 또한 sort를 하는데 드는 O(nlogn) 이라는 시간 복잡도를 갖는다.

hash table을 사용하면 O(n)만에 풀 수 있다. 만약 count라는 object에 해당 값이 없으면 그 값을 키로 1이라는 값을 넣어두고, 있다면 true를 바로 return 하게 했다.

그리고 다른 분이 사용한 set을 사용하면 더 짧은 시간에 풀 수 있다.
Set은 중복을 제거 해주는 자료구조이기 때문에 Set에 배열을 넣었을 때 길이가 달라진 다면 중복이 있는 것이라고 볼 수 있다.

내 코드

var containsDuplicate = function(nums) {
    const count = {};
    for (let i = 0; i < nums.length; i++) {
        if (count[nums[i]]) {
            return true;
        }
        count[nums[i]] = 1;
    }
    return false;
};

더 좋은 코드

var containsDuplicate = function(nums) {
    const set = new Set(nums);
    
    return set.size !== nums.length
};

LeetCode easy 문제는 그렇게 어렵지는 않지만 더 짧은 시간에 푸는 방법을 생각해보기에 좋은 것 같다.

profile
3년차 프론트엔드 개발자 문건우입니다.

0개의 댓글