반응형
k: 🍊 귤의 개수 (1 ≤ k ≤ tangerine의 길이 ≤ 100,000)
tangerine: 귤의 크기를 담은 배열 (1 ≤ tangerine의 원소 ≤ 10,000,000)
핵심: 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값을 return
자바스크립트 풀이
전체 코드
function solution(k, tangerine) {
let result = 0;
let count = {};
tangerine.forEach(x => {
count[x] = (count[x] || 0) + 1;
});
const frequency = Object.values(count).sort((a,b)=> b-a);
for(let freq of frequency){
if(k <= 0) break;
else {
result++;
k -= freq;
}
}
return result;
}
result: 담는 종류의 수 최솟값
count: 귤 크기별 개수
frequency: 귤 크기별 개수를 담은 배열로 내림차순으로 정렬됨
우선, 귤을 크기별 개수를 count 변수에 담는다 🍊
k: 6, tangerine: [1, 3, 2, 5, 4, 5, 2, 3] 인 경우
tangerine.forEach(x => {
count[x] = (count[x] || 0) + 1;
});
위와 같은 과정을 거치면 count는 { '1': 1, '2': 2, '3': 2, '4': 1, '5': 2 } 이다.
const frequency = Object.values(count).sort((a,b)=> b-a);
for(let freq of frequency){
if(k <= 0) break;
else {
result++;
k -= freq;
}
}
frequency는 [2,2,2,1,1]이다. 순서대로 [크기가 2인 귤의 개수, 크기가 3인 귤의 개수, 크기가 5인 귤의 개수, 크기가 1인 귤의 개수, 크기가 4인 귤의 개수] 인 것이다.
frequency 를 내림차순 정렬하는 이유는 개수가 많은 귤부터 골라야 고른 귤의 크기 종류수가 최소가 되기 때문이다.
frequency를 for문으로 돌면서 k가 1 이상인 경우 주어진 k에서 귤의 개수를 차감한다.
k가 0이 되면 for문이 종료된다.
return result;
그리고 result를 반환하면 완성이다.
반응형
'자료구조 & 알고리즘' 카테고리의 다른 글
프로그래머스 영어 끝말잇기 - 자바스크립트 풀이 (0) | 2025.01.01 |
---|---|
프로그래머스 구명보트 - 자바스크립트 풀이 ⛵︎ (0) | 2024.12.11 |
프로그래머스 카펫 - 자바스크립트 풀이 (0) | 2024.12.10 |
프로그래머스 다음 큰 숫자 - 자바스크립트 풀이 (0) | 2024.12.08 |
프로그래머스 피보나치 수 - 자바스크립트 풀이 (0) | 2024.12.04 |