import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
public class sortingWord_1181 {
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);
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
for (int i = 0; i < n; i++) {
System.out.println(arr[i]);
}
}
}
길이를 먼저 정렬하고, 알파벳 순으로 정렬해야 한다고 생각했는데,
알파벳으로 정렬한 후에 길이 순으로 정렬하는 순서가 맞았다.
알파벳으로 정렬하기 위해서는 그냥 sort함수를 사용하면 됐는데, 길이를 정렬하기 위해서는 'Comparator'를 사용해야 한다.
Comparator
@override
public int compare (String o1, String o2) {
return o1.compareTo(o2);
}
o1, o2를 비교하여
o1 < o2 이면 -1,
o1 = o2 이면 0,
o1 > o2 이면 1을 return한다.
따라서, 재사용하지 않기 때문에 익명 객체로 만들면
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
이때, 글자수 기준으로 정렬을 하려면 return 값만 수정해주면 된다.
return o1.length() - o2.length();
람다식을 사용하면
Arrays.sort(arr, (s1, s2) -> s1.compareTo(s2));
더 간단한 작성 방법으로는
Arrays.sort(arr, Comparator.comparing(String::length)).reversed();
.reversed() 는 역순으로 출력하기 위한 것이다.
:: 은 클래스의 메서드를 참조하는 것으로,
String class의 length() 메서드 반환값을 이용하겠다는 의미이다.
다른 표현방법으로 작성하면,
Comparator.comparing (s -> s.length());
'JAVA' 카테고리의 다른 글
[JAVA][백준] 7568_덩치 (0) | 2024.04.22 |
---|---|
[JAVA][백준] 2751_수 정렬하기 2 (0) | 2024.04.18 |
[JAVA][백준] 10989_수 정렬하기 3 (BufferedReader) (0) | 2024.04.16 |
[JAVA][백준] 1978_소수 찾기 (0) | 2024.04.15 |
[JAVA][백준] 10809_알파벳 (0) | 2024.04.15 |