자바 코딩테스트
백준 1181 단어정렬
백엔드 개발자
2025. 4. 16. 23:21
알파벳 소문자로 이루어진 N개 단어가 들어올때
1. 길이가 짧은 것부터
2. 길이가 같으면 사전순.
으로 정렬하는 프로그램 작성.
중복단어는 하나만 남기고 제거
제한은 2초, N은 2만까지.
예제 입력 1 복사
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
예제 출력 1 복사
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
1. 중복 제거면 set 생각중.
2. 정렬
길이 순으로 정렬하고 같으면 사전순으로 정렬하는 커스텀하게 정렬하는 로직에서 막혔었다.
방법은 Comparator<>를 따로 구현하고, Arrays.sort를 사용한 방법.
그후 중복 제거를 위해서 set으로 바꿔보았다.
package 백준.단어정렬1181;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
String [ ] arr = new String[count];
for (int i = 0; i < count; i++) {
arr[i] = (br.readLine());
}
Arrays.sort(arr, new Comparator<>() {
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 LinkedHashSet<>(Arrays.asList(arr));
for (String s : set) {
System.out.println(s);
}
br.close();
}
}
배운 부분
1. Comparator의 compare는 양수일 경우 위치를 바꾼다.
그래서 길이가 다르면 바꾸도록 앞의 문자열의 길이 - 뒤 문자열의 길이를 활용했다.
2. compareTo는 사전순으로 정렬하는 방법. 내부적으로 유니코드끼리 비교해서 사전순처럼 정렬이 된다.