import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
Map<Integer, Integer> m=new HashMap<>();
for(int t:tangerine){
m.put(t,m.getOrDefault(t, 0)+1);
}
List<Integer> list=new ArrayList<>(m.values());
Collections.sort(list, Collections.reverseOrder());
for(Integer a:list){
k-=a;
answer++;
if(k<1){
return answer;
}
}
return answer;
}
}
Map<Integer, Integer> 타입의 m을 생성합니다. 이 맵은 귤의 크기를 키로 하고, 해당 크기의 귤 개수를 값으로 저장하기 위해 사용됩니다.
tangerine 배열을 순회하면서 각 귤의 크기를 확인합니다. m.getOrDefault(t, 0)+1을 사용하여 현재 귤의 크기 t가 m에 이미 존재하는 경우 해당 키의 값을 증가시키고, 그렇지 않은 경우 0으로 초기화된 값에 1을 더하여 새로운 엔트리를 m에 추가합니다.
m.values()를 사용하여 m의 값들을 담은 리스트인 list를 생성합니다. 이 리스트에는 각 귤 크기별 개수가 포함됩니다.
Collections.sort(list, Collections.reverseOrder())를 사용하여 list를 내림차순으로 정렬합니다. 이렇게 하면 귤 개수가 많은 순서대로 정렬됩니다.
list를 순회하면서 선택한 귤의 개수를 카운트합니다. 먼저 k에서 현재 귤 개수 a를 빼주고, answer에 1을 더합니다. 그리고 k가 1보다 작으면 선택한 귤의 개수인 answer를 반환하고 종료합니다. 즉, 원하는 개수 k만큼의 귤을 선택한 경우에 종료됩니다.
모든 순회가 끝나면 answer를 반환합니다.