https://www.acmicpc.net/problem/20920
20920번: 영단어 암기는 괴로워
첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
public static void main(String[] args) throws Exception {
HashMap<String, Integer> map = new HashMap<>();
st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
for (int i = 0; i < N; i++) {
String s = br.readLine();
if (s.length() < M) continue;
if (map.containsKey(s)) map.put(s, map.get(s) + 1);
else map.put(s, 1);
}
PriorityQueue<Word> pq = new PriorityQueue<>();
map.entrySet().forEach(x -> pq.offer(new Word(x.getKey(), x.getValue())));
while (!pq.isEmpty()) {
Word w = pq.poll();
sb.append(w.s + "\n");
}
System.out.print(sb.toString());
}
static class Word implements Comparable<Word> {
String s;
int cnt;
public Word (String s, int cnt) {
this.s = s;
this.cnt = cnt;
}
@Override
public int compareTo (Word o) {
if (this.cnt == o.cnt) {
if (this.s.length() == o.s.length()) return this.s.compareTo(o.s);
return o.s.length() - this.s.length();
}
return o.cnt - this.cnt;
}
}
}
'OJ' 카테고리의 다른 글
[BOJ] 1159 농구 경기 (JAVA) (0) | 2023.02.27 |
---|---|
[BOJ] 5525 IOIOI (JAVA) (0) | 2023.02.26 |
[BOJ] 25501 재귀의 귀재 (JAVA) (0) | 2023.02.24 |
[BOJ] 2935 소음 (JAVA) (0) | 2023.02.23 |
[BOJ] 5555 반지 (JAVA) (0) | 2023.02.22 |