🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/138476
✏️ 풀이
function solution(k, tangerine) {
const counts = {};
tangerine.forEach(v => counts[v] = (counts[v] ?? 0) + 1);
const sortedCounts = Object.values(counts).sort((a, b) => a - b);
const restCount = tangerine.length - k;
let sum = 0;
let typeCount = Object.keys(counts).length;
for (const count of sortedCounts) {
if (sum + count > restCount) {
break;
}
sum += count;
typeCount--;
}
return typeCount;
}
먼저 각 크기별 귤의 개수를 구한다. 그리고 귤의 개수를 오름차순으로 정렬한다. sortedCounts는 동일한 크기의 귤의 개수를 오름차순 정렬한 것이므로, sortedCounts를 순회하면서 k개 이상의 귤을 남길 수 있도록 가장 개수가 적은 크기의 귤들을 최대한 많이 제외시키면 된다. 이 때, 제외된 귤의 개수의 합이 (전체 귤의 개수 - k)를 넘어간다면 반복문을 종료한다. 최종적으로 (전체 귤 종류의 수 - 제외된 귤 종류의 수)를 반환하면 정답이다.
'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스 Level 2] 점프와 순간 이동 - JavaScript (0) | 2023.01.04 |
---|---|
[프로그래머스 Level 2] 올바른 괄호 - JavaScript (0) | 2023.01.04 |
[프로그래머스 Level 2] 디펜스 게임 - JavaScript (0) | 2022.12.30 |
[프로그래머스 Level 2] 짝지어 제거하기 - JavaScript (0) | 2022.11.19 |
[프로그래머스 Level 2] 이진 변환 반복하기 - JavaScript (0) | 2022.11.14 |