문제
https://school.programmers.co.kr/learn/courses/30/lessons/138476
접근 방법 및 풀이
귤의 각각의 크기의 수를 취합하여 크기의 수가 가장 낮은 순서대로 귤을 제거 한 후 귤의 크기 종류의 수를 반환
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;
}
}
}