https://school.programmers.co.kr/learn/courses/30/lessons/138476
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
Map<Integer, Integer> map = new HashMap<>();
for(int t : tangerine) {
map.put(t, map.getOrDefault(t, 0) + 1);
}
ArrayList<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(map.entrySet());
entryList.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));
int sum = 0;
for(Map.Entry<Integer, Integer> entry : entryList) {
sum += entry.getValue();
answer ++;
if(sum >= k) break;
}
return answer;
}
}
문제 풀이
1. tangerine[ ]의 빈도수를 Map으로 저장한다.
2. Map의 value 값으로 내림차순 정렬을 하고
3. sum 에 빈도수를 더해가면서(answer도 1씩 증가) k와 같거나 클 때 나간다.
해맸던 부분
1. 정렬을 하고 -> 빈도수 계산 -> 경우의 수로 탐색 하는 줄 알았다.
2. 단순하게 생각해서 빈도수의 내림차순으로 키 값을 넘겨서 더해주는 과정을 통해 답을 구할 수 있었다.
'자료구조 & 알고리즘 관련 > 코딩테스트' 카테고리의 다른 글
카펫 (0) | 2023.01.21 |
---|---|
스킬트리 (0) | 2023.01.03 |
N진수 게임 문제 (자바) (0) | 2022.12.28 |
최대공약수 최소공배수 (0) | 2022.12.24 |
Probing (0) | 2022.12.22 |