728x90
https://www.acmicpc.net/problem/20920
메모리: 42,536 KB , 시간: 664 ms
사용 알고리즘: 자료 구조, 해시를 사용한 집합과 맵, 정렬, 문자열
728x90
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static class Word {
String word; // 단어
int count; // 등장 횟수
int length; // 단어 길이
Word(String word) {
this.word = word;
count = 0;
length = word.length();
}
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
Map<String, Word> words = new HashMap<>();
String w;
Word word;
for (int i = 0; i < N; i++) {
w = br.readLine();
if(w.length() >= M) { // 단어의 길이가 M 이상일 때만
word = words.get(w);
if(word == null) { // 처음 입력받은 단어라면
word = new Word(w);
words.put(w, word);
}
// 해당 단어 등장 횟수 저장
word.count++;
}
}
// 정렬을 위해 단어들을 리스트에 담기
List<Word> list = new ArrayList<>();
for(String k : words.keySet()) {
list.add(words.get(k));
}
// 정렬
Collections.sort(list, (o1, o2) -> {
if(o1.count != o2.count) {
return o2.count - o1.count;
}
if(o1.length != o2.length) {
return o2.length - o1.length;
}
return o1.word.compareTo(o2.word);
});
// 출력
StringBuilder result = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
result.append(list.get(i).word).append("\n");
}
System.out.print(result);
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 15655] N과 M (6) (java) (0) | 2024.11.07 |
---|---|
[백준, BOJ 4963] 섬의 개수 (java) (0) | 2024.11.06 |
[백준, BOJ 9017] 크로스 컨트리 (java) (0) | 2024.10.27 |
[백준, BOJ 13305] 주유소 (java) (0) | 2024.10.27 |
[백준, BOJ 20125] 쿠키의 신체 측정 (java) (1) | 2024.10.26 |