귤 고르기

이 문제는 귤의 크기 배열에서 각 크기가 나타난 빈도를 계산한 후, 이 빈도들을 내림차순으로 정렬하여 빈도수가 높은 순서대로 귤을 선택해 누적합이 k개 이상이 되는 순간까지 진행하며, 그때까지 사용된 서로 다른 귤 크기의 종류 수를 결과로 반환함으로써 귤의 크기 종류를 최소화하는 해답을 도출하는 알고리즘을 요구합니다.

import java.util.*;

public class Tangerine {

    public int solution(int k, int[] tangerine) {
        int sum = 0;
        int answer = 0;
        Map<Integer, Integer> frequency = new LinkedHashMap<>();
        for (int tan : tangerine) frequency.put(tan, frequency.getOrDefault(tan, 0) + 1);
        List<Integer> counts = new ArrayList<>(frequency.values());
        counts.sort(Comparator.reverseOrder());
        for (int count : counts) {
            sum += count;
            answer++;
            if (sum >= k) break;
        }
        return answer;
    }
}

코딩테스트 연습 - 귤 고르기