1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
- 단어가 들어오면 길이가 M이 넘는지 확인한다.
- 단어와 횟수를 Word로 해서 list에 넣었다.
- Word에서는 단어가 나타난 개수 우선으로 비교하고, 길이를 비교한다.
- list를 정렬하고 그 안의 단어를 출력한다.
4. 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.io.IOException;
public class Main {
static class Word implements Comparable<Word>{
String word;
int cnt;
public Word(String word, int cnt) {
super();
this.word = word;
this.cnt = cnt;
}
@Override
public int compareTo(Word o) {
if(this.cnt != o.cnt) {
return o.cnt - this.cnt;
}
if(this.word.length() != o.word.length()) {
return o.word.length() - this.word.length();
}
return this.word.compareTo(o.word);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
HashMap<String, Word> map = new HashMap<>();
List<Word> list = new ArrayList<>();
String[] split = br.readLine().split(" ");
int N = Integer.parseInt(split[0]);
int M = Integer.parseInt(split[1]);
for(int i=0;i<N;i++) {
String str = br.readLine();
if(str.length()>=M) {
if(map.containsKey(str)) {
map.get(str).cnt++;
}
else {
Word word = new Word(str, 1);
map.put(str, word);
list.add(word);
}
}
}
Collections.sort(list);
for(Word w: list) {
sb.append(w.word).append("\n");
}
System.out.println(sb);
}
}
'ALGORITHM' 카테고리의 다른 글
백준 2866 문자열 잘라내기 (Java) (0) | 2023.05.25 |
---|---|
백준 17219 비밀번호 찾기 (Java) (0) | 2023.05.24 |
백준 11651 좌표 정렬하기2 (Java) (0) | 2023.05.22 |
백준 3020 개똥벌레 (Java) (1) | 2023.05.21 |
백준 13549 숨바꼭질 3 (Java) (1) | 2023.05.20 |