문제 정보
- 문제 링크: https://www.acmicpc.net/problem/1181
- 문제 번호: 1181번
- 문제 이름: 단어 정렬
- 문제 난이도: 실버5
- 반복 학습 날짜
- 2024.01.06 완료
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int numWords = Integer.parseInt(reader.readLine());
List<String> wordList = new ArrayList<>();
// 단어 입력과 중복 제거
for (int i = 0; i < numWords; i++) {
String word = reader.readLine();
// 중복 확인 후 추가
if (!wordList.contains(word)) {
wordList.add(word);
}
}
// 단어 정렬 Comparator 구현
Comparator<String> wordComparator = new Comparator<String>() {
@Override
public int compare(String first, String second) {
if (first.length() > second.length()) {
return 1; // 첫 번째 단어가 길이가 더 길면 1 반환
} else if (first.length() == second.length()) {
return first.compareTo(second); // 길이가 같으면 사전순으로 비교
}
return -1; // 첫 번째 단어가 길이가 더 짧으면 -1 반환
}
};
// 단어 정렬 및 출력
Collections.sort(wordList, wordComparator);
for (int i = 0; i < wordList.size(); i++) {
System.out.println(wordList.get(i));
}
}
}
풀이
Step1: Comparator를 사용하여 비교 알고리즘 정의
// 단어 정렬 Comparator 구현
Comparator<String> wordComparator = new Comparator<String>() {
@Override
public int compare(String first, String second) {
if (first.length() > second.length()) {
return 1; // 첫 번째 단어가 길이가 더 길면 1 반환
} else if (first.length() == second.length()) {
return first.compareTo(second); // 길이가 같으면 사전순으로 비교
}
return -1; // 첫 번째 단어가 길이가 더 짧으면 -1 반환
}
};
- "Comparator" 인터페이스를 구현하여 두 문자열을 비교합니다. 비교하는 로직은 첫 번째로 길이가 긴 순서로 정렬을 하고, 길이가 같으면 사전순으로 정렬합니다.
- 양수를 반환할 경우 첫 번째 객체가 두 번째 객체보다 크다는 것을 의미합니다.
- 음수를 반환할 경우 첫 번째 객체가 두 번째 객체보다 작다는 것을 의미합니다.
- 0을 반환할 경우 두 객체가 동일하다는 것을 의미합니다.
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘 / JAVA] 10816번 숫자 카드2 (0) | 2024.01.07 |
---|---|
[백준 알고리즘 / JAVA] 10815번 숫자 카드 (2) | 2024.01.07 |
[백준 알고리즘 / JAVA] 2798번 블랙잭 (0) | 2024.01.06 |
[백준 알고리즘 / JAVA] 1546번 평균 (1) | 2024.01.04 |
[백준 알고리즘 / JAVA] 9012번 괄호 (0) | 2024.01.04 |