1. 제출 코드 (10분 23초 / Dictionary, Sort)
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> {
return o2[1] - o1[1];
});
Map<Integer, Integer> list = new HashMap<>();
for(int i = 0; i < tangerine.length; i++) {
list.put(tangerine[i], list.getOrDefault(tangerine[i], 0) + 1);
}
for(Integer key : list.keySet()) {
pq.add(new int[] {key, list.get(key)});
}
int temp = 0;
while(temp < k) {
temp += pq.poll()[1];
answer++;
}
return answer;
}
}
2. 구현 로직
- 귤 사이즈마다의 개수를 카운트 (딕셔너리 사용)
- 개수가 많은 것부터 채워 넣으면 되므로 우선순위 큐를 이용하여 정렬
- 우선순위 큐에서 1개 뺀 것을 임시 바구니에 담고 k와 비교
- k개보다 작다면 반복하고 크다면 반복문을 종료하고 정답 추출
3. 유의할 점
- 귤의 개수를 딱 맞춰야 하는 줄 알았는데 굳이 그럴 필요가 없다는 것을 알았다.