반응형
백준 1181번 문제 - 단어 정렬
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
문제 분석
- 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로 (단, 중복된 단어는 하나만 남기고 제거해야 한다.)
해결 키 포인트
- 단어(String s)와 단어 길이를 담은 클래스(Word) 생성
- 중복된 단어는 하나만 출력하기 위해 TreeSet 사용
- 클래스가 implements Comparable<Word> 하도록 한다.
- 정렬 방법: 길이가 짧은 것부터, 길이가 동일할 경우 compareTo()로 사전 순으로
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
TreeSet<Word> words = new TreeSet<>();
for (int i = 0; i < N; i++) {
words.add(new Word(br.readLine()));
}
for(Word w : words) {
bw.write(w.s + "\n");
}
bw.flush();
bw.close();
}
public static class Word implements Comparable<Word> {
String s;
int len;
public Word(String s) {
this.s = s;
len = s.length();
}
@Override
public int compareTo(Word o) {
if(len == o.len) {
return s.compareTo(o.s);
}
return len - o.len;
}
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[백준 11650] 좌표 정렬하기 (JAVA) (0) | 2023.11.30 |
---|---|
[백준 10814] 나이순 정렬 (JAVA) (0) | 2023.11.30 |
[백준 1966] 프린터 큐 (JAVA) (0) | 2023.11.30 |
[백준 2108] 통계학 (JAVA) (1) | 2023.11.30 |
[백준 1654] 랜선 자르기 (JAVA) (4) | 2023.11.24 |