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을 활용하여 문제를 풀었다.
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;
단지 효율성만을 위한 코드를 짠다면 한 줄로 줄인 코드가 최선이고,
가독성과 효율성 모두를 고려한다면 처음 리팩토링한 코드가 최선 아닐까?