Bleeding edge

[LeetCode] 2206. Divide Array Into Equal Pairs - 자바스크립트 0627 본문

카테고리 없음

[LeetCode] 2206. Divide Array Into Equal Pairs - 자바스크립트 0627

codevil 2022. 6. 27. 12:34

https://leetcode.com/problems/divide-array-into-equal-pairs/

 

Divide Array Into Equal Pairs - 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

앞으로 문제풀이를 할 때 효율성이 낮으면 반드시 효율성이 낮은 이유를 검색해보고 풀어야겠다.

1. 문제는 간단하다 2개의 짝이 떨어지는 경우를풀이를 해야하기 때문에 sort를 했다.

    let answer = nums.sort((a, b) => a - b)

2. 그리고 i와 i-1이 같은경우에는 두개다 pop으로 처리하고, i를 2씩 더했으며, 성립하지 않는경우 false를 리턴했다.

    for (let i = answer.length - 1; i > 0; i -= 2) {
        if (answer[i] === answer[i - 1]) {
            answer.pop()
            answer.pop()
        } else {
            return false
        }
    }

 

전체풀이

var divideArray = function (nums) {
    let answer = nums.sort((a, b) => a - b)
    for (let i = answer.length - 1; i > 0; i -= 2) {
        if (answer[i] === answer[i - 1]) {
            answer.pop()
            answer.pop()
        } else {
            return false
        }
    }
    return true
};

개인적으로는 내 풀이의 효율성보다 너무좋은 풀이를 봐서 그문제를 보려고한다.

1. hash를 만든다

  const hash = {};

2. has가 존재한다면 hash+1 없다면 0을 넣는다

    nums.map((num) => (hash[num] = (hash[num] || 0) + 1));

3. hash에 값이 짝수인지 체크한다

    for (let key in hash) {
      if (hash[key] % 2 !== 0) return false;
    }

 

전체풀이

var divideArray = function(nums) {
    const hash = {};
    nums.map((num) => (hash[num] = (hash[num] || 0) + 1));
    for (let key in hash) {
      if (hash[key] % 2 !== 0) return false;
    }
    return true;
  };

 

내풀이는 125ms, 아래의 풀이는 71ms이다. 내가 생각했을때 우선, sort를 쓰나, map을 사용하다 소요된 시간은 같으나, sort를하면서 pop을 두번씩 하는 과정에서 시간차이가 많이난 것 같다.