https://www.acmicpc.net/problem/2910
1. 아이디어
LinkedHashMap을 활용해서 빈도 정렬을 수행했다.
2. 문제풀이
정수와 그 개수를 저장하는 LinkedHashMap을 활용해서 입력을 받았다.
이후 Entry를 List로 옮겨서 정렬을 수행했는데 이때 value를 기준으로 정렬하면 빈도를 기준으로 정렬하면서 먼저 나온 것 순서로 정렬할 수 있다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
Map<Integer, Integer> map = new LinkedHashMap<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int num = Integer.parseInt(st.nextToken());
map.put(num, map.getOrDefault(num, 0) + 1);
}
List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
list.sort(((o1, o2) -> Integer.compare(o2.getValue(), o1.getValue())));
for (Map.Entry<Integer, Integer> entry : list) {
for (int i = 0; i < entry.getValue(); i++) {
sb.append(entry.getKey()).append(" ");
}
}
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 1919번 - 애너그램 만들기 [Java] (0) | 2025.01.04 |
---|---|
[백준] 5648번 - 역원소 정렬 [Java] (1) | 2025.01.04 |
[백준] 10825번 - 국영수 [Java] (2) | 2025.01.04 |
[백준] 2747번 - 피보나치 수 [Java] (0) | 2025.01.04 |
[백준] 2010번 - 플러그 [Java] (0) | 2025.01.04 |