https://school.programmers.co.kr/learn/courses/30/lessons/138476
HashMap에 각각 수확한 귤 크기, 크기의 개수를 저장한 후 value를 중심으로 정렬 해 준다. 이후, sum값이 k값보다 작을 때 까지 더해주면 된다. 이 때, value값보다 list.get(i).getValue 값이 더 클 때에는 break를 걸 수 있도록 if문을 먼저 수행해야 한다.
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
//k : 상자에 담으려는 귤의 개수
//tangerine : 귤의 크기
//귤의 다른 종류의 수
//우선 HashMap에 저장한 후 큰 순서대로 get
HashMap<Integer, Integer> map = new HashMap<>();
for(int i=0; i<tangerine.length; i++){
if(!map.containsKey(tangerine[i])){
map.put(tangerine[i], 1);
}else{
map.put(tangerine[i], map.get(tangerine[i])+1);
}
}
List<Map.Entry<Integer, Integer>> list = new LinkedList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>(){
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2){
return o2.getValue() - o1.getValue();
}
});
int sum = 0;
int answer = 0;
for(int i=0; i<list.size(); i++){
if(sum >= k){
break;
}
answer ++;
sum = sum + list.get(i).getValue();
}
return answer;
}
}