
문제 링크
https://www.acmicpc.net/problem/20920
접근 방법
입력된 단어 중 길이가 m 이상인 단어들만 필터링하여 등장 빈도를 카운트합니다.
정렬 기준은 다음과 같습니다:
- 자주 나오는 단어일수록 앞에
- 길이가 길수록 앞에
- 알파벳 사전순으로 앞에
소스 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()), m = Integer.parseInt(st.nextToken());
Map<String, Integer> map = new HashMap<>();
while (n-- > 0) {
String str = br.readLine();
if (str.length() >= m) {
map.put(str, map.getOrDefault(str, 0) + 1);
}
}
List<String> arr = new ArrayList<>(map.keySet());
arr.sort((a, b) -> {
if (map.get(b) - map.get(a) != 0) {
return map.get(b) - map.get(a);
} if (b.length() - a.length() != 0) {
return b.length() - a.length();
}
return a.compareTo(b);
});
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.size(); i++) {
sb.append(arr.get(i)).append('\n');
}
System.out.println(sb);
}
}
코드 설명
단어 등장 횟수를 HashMap에 저장하고, 조건에 맞는 단어만 List에 담습니다.List.sort()를 커스텀 comparator로 정렬하여 조건을 만족시킵니다.StringBuilder로 정답을 한 번에 출력합니다.
'코딩테스트 > 백준' 카테고리의 다른 글
| [백준 JAVA] 1018. 체스판 다시 칠하기 (2) | 2025.08.05 |
|---|---|
| [백준 JAVA] 14888. 연산자 끼워넣기 (0) | 2025.07.31 |
| [백준 JAVA] 9663. N-Queen (0) | 2025.07.27 |
| [백준 JAVA] 15683. 감시 (0) | 2025.07.21 |
| [백준 JAVA] 4779. 칸토어 집합 (0) | 2025.07.18 |