본문 바로가기
자료구조 & 알고리즘

프로그래머스 귤 고르기 - 자바스크립트 풀이 🍊

by PARADISE247 2024. 12. 11.
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

규우울

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를 반환하면 완성이다.

반응형