import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
// 일단 종류별로 Map에 담는다.
// k개수에 맞게 Map의 갯수가 적은 거 부터 지워준다?
int answer = 0;
Map<Integer,Integer> map = new HashMap<>();
for(int x : tangerine){
map.put(x,map.getOrDefault(x,0)+1);
}
// value 기준 내림차순으로 정리
ArrayList<Integer> keys = new ArrayList<>(map.keySet());
Collections.sort(keys, (v1,v2) -> (map.get(v2).compareTo(map.get(v1))));
int sum=0;
for(Integer key : keys){
if(sum>=k) break;
sum+=map.get(key);
answer++;
}
return answer;
}
}
문제 자체는 쉽다. Map에 담아서 문제에 맞게 풀어주면 된다. 근데 Map정렬하는 법을 알아야 풀수있는 문제이다. 이번 기회에 key,value 값 기준으로 정렬하는 방법을 알아두자.
// key 기준 오름차순 정리
ArrayList<인티저> keys = new ArrayList<>(map.keySet());
Collections.sort(keys);
// key 기준 내림차순 정리
ArrayList<인티저> keys = new ArrayList<>(map.keySet());
Collections.sort(keys,Collections.reverseOrder());
// value 기준 오름차순으로 정리
ArrayList<Integer> keys = new ArrayList<>(map.keySet());
Collections.sort(keys, (v1,v2) -> (map.get(v1).compareTo(map.get(v2))));
// value 기준 내림차순으로 정리
ArrayList<Integer> keys = new ArrayList<>(map.keySet());
Collections.sort(keys, (v1,v2) -> (map.get(v2).compareTo(map.get(v1))));