정수 배열 tangerine을 순회하며 각 숫자의 등장 횟수를 countMap 객체에 저장
num이라는 키가 이미 존재한다면 (countMap[num] || 0 부분에서 기존의 값 사용
undefined 이거나 null이라면 0이라는 기본값 사용
전체 구문에서는 1을 더해 새로운 값으로 업데이트
배열 정렬 (sortedArray)
countA === B : 중복 횟수가 같으면 작은 숫자가 앞에 오도록 정렬
중복 횟수가 다르면 중복 횟수가 많은 순서로 정렬
상위 k개 추출 및 중복 제거
정렬된 배열에서 상위 k개를 추출한 후 new Set을 사용하여 중복된 숫자 제거
중복 제거한 배열의 길이를 반환
다른 풀이
function solution(k, tangerine) {
let answer = 0;
const tDict = {};
// 각 숫자의 등장 횟수를 세는 객체 생성 (tDict)
tangerine.forEach((t) => tDict[t] = (tDict[t] || 0) + 1);
// 등장 횟수를 기준으로 내림차순 정렬된 배열 생성 (tArr)
const tArr = Object.values(tDict).sort((a, b) => b - a);
// 상위 k개의 중복된 숫자의 개수를 계산
for (const t of tArr) {
answer++;
if (k > t) k -= t;
else break;
}
return answer;
}
for of
정렬된 배열 tArr를 순회하며 상위 k개의 중복된 숫자 계산
answer 변수에 상위 k개의 서로 다른 중복 숫자의 개수가 저장
k가 현재 숫자의 등장 횟수(t)보다 크면 k에서 t를 빼고, k가 작아지면 더 이상 중복된 숫자를 포함시킬수 없어 반복 종료