프로그래밍/Algorithm

[프로그래머스] 귤 고르기

일단개그하다 2022. 12. 17. 23:15

문제

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

 

프로그래머스

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

programmers.co.kr

접근 방법 및 풀이

귤의 각각의 크기의 수를 취합하여 크기의 수가 가장 낮은 순서대로 귤을 제거 한 후 귤의 크기 종류의 수를 반환

import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;

public class Q30_138476 {
    public int solution(int k, int[] tangerine) {
        Map<Integer, Data> map = new HashMap<>();

        for (int i : tangerine) {
            Data data = null;
            if (map.containsKey(i)) {
                data = map.get(i);
            } else {
                data = new Data();
                data.size = i;
                map.put(i, data);
            }

            data.count++;
        }

        PriorityQueue<Data> queue = new PriorityQueue<>();

        for (Data data : map.values()) {
            queue.add(data);
        }

        int tangerineLength = tangerine.length;
        int cut = tangerineLength - k;
        for (int i = 0; i < cut; i++) {
            Data data = queue.peek();
            data.count--;
            if (data.count == 0) {
                queue.poll();
                map.remove(data.size);
            }
        }

        return map.size();
    }

    // 우선순위 큐를 사용하기 위한 클래스
    class Data implements Comparable<Data> {
        public int size = 0;

        public int count = 0;

        @Override
        public int compareTo(Data o) {
            return this.count - o.count;
        }
    }
}