문제
문제 풀이
문제에서 주어는 귤의 종류에 따라 수를 카운팅해서 큰순으로 합하다가 k 랑 같거나 커질때 더한 횟수를 반환하면 되는 문제이다.
나의 답안
public static int solution(int k, int[] tangerine) {
int answer = 0;
int[] countArr = new int[10000001];
for(int orange : tangerine){
countArr[orange]++;
}
countArr = Arrays.stream(countArr).boxed().sorted((o1, o2) -> o2 - o1).mapToInt(i -> i).toArray();
int sum = 0;
for (int count : countArr){
sum += count;
answer++;
if (sum >= k) break;
}
return answer;
}
다른 답안
평소에 맵을 정렬하고 싶다는 생각을 몇 번 했었는데 아래 코드와 같은 방식으로 처리를 하고 있는 것을 보고 기억을 해보고자 가져와봅니다.
int answer = 0;
HashMap<Integer,Integer> map =new HashMap<>();
for (int t : tangerine) {
map.put(t, map.getOrDefault(t, 0) + 1);
}
List<Integer> list = new ArrayList<>(map.keySet());
list.sort((o1, o2) -> map.get(o2)-map.get(o1));
for(Integer key:list){
k -=map.get(key);
answer++;
if(k<=0){
break;
}
}
return answer;