[LeetCode] Single Number 2

IT공부중·2020년 6월 26일
0

알고리즘

목록 보기
32/49
post-custom-banner

문제

https://leetcode.com/explore/challenge/card/june-leetcoding-challenge/542/week-4-june-22nd-june-28th/3368/

Input: [2,2,3,2]
Output: 3

Input: [0,1,0,1,0,1,99]
Output: 99

1번만 나온 수를 return 해주면 되는 간단한 문제다.
하지만 간단한 문제도 효율적으로 예쁜 코드를 짜는 연습을 하는데에 도움이 된다고 생각한다.
object를 쓰는 것 보다 Map을 쓰는 것이 더 효율적이라 Map을 사용했다.

나의 코드

const singleNumber = function (nums) {
  let result = 0;
  const numMap = new Map();
  
  nums.forEach((num) => { // Map에 num이 있으면 value + 1을 했고 없을 경우 1을 넣어줬다.
    if (numMap.has(num)) {
      numMap.set(num, numMap.get(num) + 1);
    } else {
      numMap.set(num, 1);
    }
  });
  
  let entries = numMap.entries(); // Map의 entries을 활용했다.
  
  for (let i = 0; i < numMap.size; i++) {
     const [key, value] = entries.next().value; // MDN을 보면 next().value을 하면 순서대로 key, value 값이 나온다고 적혀있다. iterator라서 그런 것 같다. 구조 분해 문법으로 key와 value을 받았다.
     if (value === 1) return key; // value가 1일 경우 return 해주었다.
  }
};

다른 분의 코드

const singleNumber = function (nums) {
  let result = 0;
  const numMap = new Map();
  nums.forEach((num) => {
    if (numMap.has(num)) {
      numMap.set(num, numMap.get(num) + 1);
    } else {
      numMap.set(num, 1);
    }
  });
  let entries = numMap.entries();
  return [...entries].filter((entry) => entry[1] === 1)[0][0];
  // 위에까진 똑같은데 마지막 부분이 달랐다. spread 문법을 통해 2차원 배열 형식으로 만들어주고. value가 1인 값의 key 값을 출력해주었다.
};
profile
4년차 프론트엔드 개발자 문건우입니다.
post-custom-banner

0개의 댓글