Notice
Recent Posts
Link
- Today
- Total
hye-log
[백준]1181번 단어 정렬(JAVA) 본문
0. 문제 링크
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
1. 문제 설명
1) 단어의 개수 N 개가 주어지면, 단어의 길이가 짧은 순으로, 단어의 길이가 같다면 사전 순으로 중복 없이 정렬하기
2. 입출력
// input
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
// output
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
3. 코드
import java.io.*;
import java.util.*;
public class b1181 {
public static void main(String[] args) throws NumberFormatException, IOException {
// System.setIn(new FileInputStream(new File("input.txt")));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine()); // 단어의 개수
String[] arr = new String[N]; // 단어를 저장할 배열
for (int i = 0; i < N; i++) {
arr[i] = br.readLine();
}
Arrays.sort(arr, new Comparator<String>() { // Comparator를 이용한 정렬
@Override
public int compare(String o1, String o2) {
if(o1.length() == o2.length()) // 단어의 길이가 같다면
return o1.compareTo(o2); // 사전순 정렬
return o1.length() - o2.length(); // 단어의 길이를 기준으로 정렬
}
});
Set<String> set = new HashSet<String>(); // 단어의 중복을 확인할 set 배열
for (int i = 0; i < arr.length; i++) {
if(set.add(arr[i])) { // set에 넣을 수 있다면(중복되지 않았다면)
sb.append(arr[i] + "\n"); // StringBuilder에 추가
}
}
System.out.println(sb.toString());
}
}
실행 결과

4. 회고
1) Array를 Comparator를 사용하여 정렬 조건을 부여함
2) 중복을 제거하기 위해서 Set에 넣을 수 있으면(add) true 값을 반환하는 성질을 이용하여 StringBuilder에 출력값을 저장함
5. Github
https://github.com/iihye/Algorithm/blob/main/Baekjoon/b1181.java
728x90
'CodingTest > Baekjoon' 카테고리의 다른 글
[백준]10828번 스택(JAVA) + 스택 직접 구현 (0) | 2023.08.18 |
---|---|
[백준]1436번 영화감독 숌(JAVA) (0) | 2023.08.15 |
[백준]1074번 Z(JAVA) (0) | 2023.08.14 |
[백준]1546번 평균(JAVA) (0) | 2023.08.13 |
[백준]1259번 팰린드롬수(JAVA) (0) | 2023.08.13 |
Comments