본문 바로가기

알고리즘

프로그래머스 - 귤 고르기(Java)

구현 문제입니다.

 

귤의 크기(tangerine)들과 상자에 담을 개수(k)가 주어집니다.

귤의 크기(key)와 그 개수(value)를 Map에 저장하여, 개수가 많은 순 부터 사용하여 k개를 채우면 끝나는 문제입니다.

 

[구현 코드]

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Solution {
    private Map<Integer, Integer> map;
    public int solution(int k, int[] tangerine) {
        int answer = 0;

        // 크기별로 몇 개 있는지 map에 저장함
        map = new HashMap<>();
        for (int tan : tangerine) {
            map.put(tan, map.getOrDefault(tan, 0)+1);
        }

        // 개수(value)가 많은 순으로 정렬
        List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(map.entrySet());
        entryList.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));

        // 개수가 많은 순부터 사용
        for (Map.Entry<Integer, Integer> entry : entryList) {
            if(k<=0) break;
            answer++;
            k -= entry.getValue();
        }

        return answer;
    }
}