map을 이용해서 외울 단어의 나오는 횟수를 저장한다.
외울 단어들은 Set 형식으로 저장해둔다.
외울 단어와 등장 횟수를 묶어 리스트에 추가한다.
문제에서 제시한 우선순위 대로 정렬함수를 짜고 정렬한다.
그 후 차례대로 출력한다.
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static class Word implements Comparable<Word>
{
String w;
int freq;
@Override
public int compareTo(Word o) {
if(this.freq == o.freq) {
if(this.w.length() == o.w.length()) {
return this.w.compareTo(o.w);
}
return o.w.length() - w.length();
}
else return (o.freq - this.freq);
}
public Word(String w, int freq) {
this.w = w;
this.freq = freq;
}
}
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
HashMap<String, Word> map = new HashMap<>();
int n =Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
List<String> wordSet = new ArrayList<>();
List<Word> ans = new ArrayList<>();
for(int i=0;i<n;i++)
{
String s = br.readLine();
if(s.length() >=m)
{
if(map.containsKey(s))
{
map.get(s).freq++;
}
else {
map.put(s, new Word(s, 0));
wordSet.add(s);
}
}
}
for(int i=0;i<wordSet.size();i++)
{
ans.add(map.get(wordSet.get(i)));
}
Collections.sort(ans);
for(int i=0;i<ans.size();i++)
{
bw.write(ans.get(i).w+"\n");
}
bw.flush();
}
}