https://school.programmers.co.kr/learn/courses/30/lessons/138476
문재 해결 흐름
제일많이 중복되는 수를 뽑아야 한다!(핵심)
HashMap을 사용해서 중복되는 횟수를 체크한다.
HashMap을 value(중복되는 횟수)순으로 정렬한다.
정렬한 것을 하나씩 탐색하면서 k값에서 빼준다. 동시에 answer++;
k가 0보다 작거나 같은 경우, break를 걸어서 정답을 찾아준다.
public int solution(int k, int[] tangerine) {
int answer = 0;
// 최대한 중복이 많이 되는 수 챙기기
// 최소한 중복이 없는 수 챙기기
HashMap<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < tangerine.length; i++) {
map.put(tangerine[i],map.getOrDefault(tangerine[i],0)+1);
}
// 크기 정렬
List<Map.Entry<Integer,Integer>> entryList = new ArrayList<>(map.entrySet());
entryList.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));
for (Map.Entry<Integer, Integer> entry : entryList){
if(k<=0) break;
answer++;
k -= entry.getValue();
}
return answer;
}