프로그래머스 귤 고르기 (Java,자바)

jonghyukLee·2023년 4월 14일
0

이번에 풀어본 문제는
프로그래머스 귤 고르기 입니다.

📕 문제 링크

❗️코드

import java.util.*;

class Tangerine {
    int size, count;
    
    public Tangerine(int size, int count) {
        this.size = size;
        this.count = count;
    }
}
class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        Map<Integer, Integer> hm = new HashMap<>();
        for (int t: tangerine) hm.put(t, hm.getOrDefault(t, 0) + 1);
        
        Queue<Tangerine> q = new PriorityQueue<>(new Comparator<Tangerine>() {
            @Override
            public int compare(Tangerine t1, Tangerine t2) {
                return t2.count - t1.count;
            }
        });
        
        for (int key: hm.keySet()) {
            q.add(new Tangerine(key, hm.get(key)));
        }
        int pick = k;
        while (pick > 0) {
            answer++;
            Tangerine cur = q.poll();
            
            pick -= cur.count;
        }
        return answer;
    }
}

📝 풀이

주어진 배열에서 k개의 귤을 선택하여 담는다고 할 때, 서로 다른 크기의 귤을 선택하는 것을 최소화 하여 담는다고 합니다. 최적의 경우일 때 선택된 귤의 크기 개수를 반환하는 문제입니다.
먼저 귤들의 크기와 중복 개수를 알아야 하기 때문에, 해당 값은 HashMap으로 처리해주었습니다. HashMap에 누적된 귤들을 기준으로 가장 중복값이 많은 귤을 우선적으로 선별해야 하기 때문에, 집계된 값을 우선순위 큐에 담아 순차적으로 뽑아내줍니다.
큐에서 Tangerine을 하나 꺼낼 때 마다 새로운 크기의 귤이 선택되므로 answer 카운트를 증가시켜주면 해결할 수 있습니다.

profile
머무르지 않기!

0개의 댓글