알고리즘_폰켓몬

charlie_·2021년 9월 2일
0

오늘의 문제

폰켓몬

풀이

function solution(nums) {
  let trans = new Set(nums);
  let array = [...trans];
  let numsCount = nums.length/2;
  let arrayCount = array.length;
 
  if (nums.length/2 >= array.length) {
    return arrayCount;
  } else {
    return numsCount;
  }  
}

과정

오늘의 문제의 핵심은 중복 제거였다. 위코드 초기에는 새 배열을 만들고 push, shift 메소드를 활용해 중복을 제거하는 방법을 활용했다면 이번에는 set을 활용하여 문제를 풀었다.

  • set은 배열을 입력하면 중복 값을 제거하여 유일한 값만 저장한다.

1. let trans = new Set([1, 2, 3, 3]);
2. console.log(trans); // Set(3) {1, 2, 3}

  • 이 값들을 배열로 변환하기 위해 스프레드 오퍼레이터를 활용한다.

3. let array = [...trans];
4. console.log(array); // [1, 2, 3]

  • 위의 과정을 축약하면 아래와 같다.

let trans = [...new Set([1, 2, 3, 3])]

위의 내용을 토대로 리팩토링을 진행했다.

function solution(nums) {
  let array = [...new Set(nums)];
  return array.splice(0, nums.length/2).length;
}

조금 더 찾아보니 위의 코드를 한 줄로 줄일 수도 있었다.

const solution = nums => [...new Set(nums)].splice(0, nums.length/2).length;

단지 효율성만을 위한 코드를 짠다면 한 줄로 줄인 코드가 최선이고,
가독성과 효율성 모두를 고려한다면 처음 리팩토링한 코드가 최선 아닐까?

profile
매일 하루에 딱 한 걸음만

0개의 댓글