728x90
나의 풀이
function solution(nums) {
const dict = {};
nums.forEach(el => {
if (dict[el]) {
dict[el]++;
} else {
dict[el] = 1;
}
})
const dictLen = Object.values(dict).length;
const halfNum = Math.floor(nums.length/2)
return dictLen < halfNum ? dictLen : halfNum
}
배열을 루프돌면서 dict에 쌓아주고, 그 값 종류의 개수가 주어진 총 폰켓몬 n/2 수보다 적으면 리턴하고 그렇지 않으면 n/2 수를 리턴한다.
타인의 풀이
function solution(nums) {
const max = nums.length / 2;
const arr = [...new Set(nums)];
return arr.length > max ? max : arr.length
}
배열 개수의 n/2를 맥스값으로, 주어진 배열을 Set화시켜서 중복을 없앤 뒤 다시 배열로 만든다.
두 길이를 비교하고 max가 더 작으면 max를 리턴 그렇지 않으면 반대를 리턴.
로직은 동일하지만 nums를 Set화 시켜서 중복값을 없앴다는 점이 인상적인 방식이다. 나의 반복문을 한줄로 처리할 수 있는 방법이다.
Take away
배열 중복값을 제거하는 로직은 [...new Set(arr)]과 같이 Set로 변환 후 다시 배열복사를 하는 방식으로 구현한다.
728x90
'Research > Coding Test' 카테고리의 다른 글
정렬_K번째수 (0) | 2023.11.18 |
---|---|
해시_전화번호 목록 (0) | 2023.11.18 |
프로그래머스_lv0_안전지대 (0) | 2023.11.17 |
해시_완주하지 못한 선수 (0) | 2023.11.16 |
Leetcode_bubbleSort_Height Checker (0) | 2023.04.19 |
댓글