안녕하세요. 이번에는 백준 1181 단어 정렬 문제를 풀어보려고 합니다.
https://www.acmicpc.net/problem/1181
Problem
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
Solution
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));
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>() {
public int compare(String s1, String s2) {
// 단어 길이가 같을 경우
if (s1.length() == s2.length()) {
return s1.compareTo(s2);
}
// 그 외의 경우
else {
return s1.length() - s2.length();
}
}
});
StringBuilder sb = new StringBuilder();
sb.append(arr[0] + "\n");
for(int i = 1; i < N; i++) {
if(!arr[i - 1].equals(arr[i])) {
sb.append(arr[i] + "\n");
}
}
System.out.println(sb.toString());
}
}
이번 문제는 단어를 정렬시키는 문제이다. Java에서는 Comparator와 Comparable이라는 두 가지의 정렬을 목적으로 하는 인터페이스가 존재한다. 간단히 설명하자면 Comparator은 기본 정렬 기준과 다르게 정렬하고 싶을 때 사용하고 Comparable은 기본 정렬 기준으로 정렬하고 싶을 때 사용한다. Comparator은 객체를 비교하게 해 주고 Comparable은 자기 자신과 객체를 비교하게 된다. 향후 Comparable과 Comparator을 자세히 다뤄봐야겠다. 이번에는 객체를 비교하는 Comparator을 조건에 맞게 아래 코드로 구현해서 사용해 보겠다.
Arrays.sort(arr, new Comparator<String>() {
public int compare(String s1, String s2) {
// 단어 길이가 같을 경우
if (s1.length() == s2.length()) {
return s1.compareTo(s2);
}
// 그 외의 경우
else {
return s1.length() - s2.length();
}
}
});
// 람다식으로 표현 가능
/*
Arrays.sort(arr, (s1, s2) -> {
if(s1.length() == s2.length()) return s1.compareTo(s2);
else return s1.length() - s2.length();
});
*/
Performance
반응형
'백준 Algorithm > 백준 CLASS2' 카테고리의 다른 글
[백준] CLASS2 1978 : 소수 찾기 - JAVA [자바] (2) | 2023.10.02 |
---|---|
[백준] CLASS2 1920번 : 수 찾기 - JAVA [자바] (0) | 2023.10.01 |
[백준] CLASS2 1546번 : 평균 - JAVA [자바] (0) | 2023.09.30 |
[백준] CLASS2 1259번 : 펠린드롬수 - JAVA [자바] (0) | 2023.09.29 |
[백준] CLASS2 1018번 : 체스판 다시 칠하기 - JAVA [자바] (0) | 2023.09.27 |