연습장/프로그래머스 문제풀이

[프로그래머스 Level 2] 귤 고르기 - JavaScript

Tesseractjh 2023. 1. 2. 00:38

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/138476

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

✏️ 풀이

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)를 넘어간다면 반복문을 종료한다. 최종적으로 (전체 귤 종류의 수 - 제외된 귤 종류의 수)를 반환하면 정답이다.