접근 방법
자바에서 배열을 특정한 규칙에 의해 정렬하고 싶을 때는 Arrays.sort 메소드에 Comparator를 구현하면 된다.
Arrays.sort()와 Comparator로 정렬하기
Arrays.sort() 메소드는 기본적으로 두 객체를 비교하여 위치를 바꿀지 말지 판단하고 정렬한다.
이 때 Comparator는 객체를 비교해서 메소드가 판단할 수 있도록 하는 인터페이스다.
기본적인 형태는 아래와 같다.
Arrays.sort(a, new Comparator<T>() {
@Override
public int compare(T a1, T a2) {
/*
정렬 방법
*/
}
});
여기서 T = Type 을 의미한다. 객체나 자료형 등의 다양한 타입을 설정할 수있다.
이 문제에서는 단어를 정렬하니까 배열의 타입은 String일 것이다. 즉 T = String 이다.
T를 설정했다면, 다음에 해야할 것은 compare 메소드에 정렬 방법을 구현하는 것이다.
그리고 compare 메소드의 리턴 타입은 int인데, 이는 compare 메소드가 3가지 리턴 값에 의해 판단하기 때문이다.
- 양의 정수 : 위치를 바꾼다.
- 0 : 위치를 바꾸지 않는다.
- 음의 정수 : 위치를 바꾸지 않는다.
예를 들면, { 3, 1, 5 } 라는 배열이 있고, compare 메소드가 return a1 - a2 라 해보자.
- a1 = 2, a2 = 1 이고 3 - 1 = 2 로 양수이기 때문에 a1과 a2의 위치가 바뀐다. { 1, 3, 5 }
- a1 = 3, a2 = 5 이고 3 - 5 = -2 로 음수이기 때문에 a1과 a2의 위치가 바뀌지 않는다. { 1, 3, 5 }
코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String arr[] = new String[in.nextInt()];
for(int i = 0; i < arr.length; i++){
arr[i] = in.next();
}
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();
}
}
});
System.out.println(arr[0]);
for(int i = 1; i < arr.length; i++){
if(!arr[i].equals(arr[i-1])){
System.out.println(arr[i]);
}
}
}
}
'알고리즘 > Class 2' 카테고리의 다른 글
백준 BOJ 1654번 (0) | 2022.08.16 |
---|---|
백준 BOJ 1436번 (0) | 2022.08.15 |
백준 BOJ 1259번 (0) | 2022.08.15 |
백준 BOJ 1085번 (0) | 2022.08.09 |
백준 BOJ 1018번 (0) | 2022.08.01 |
댓글