import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Problem11650 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[][] coordinates = new int[N][2]; // [x, y] N개
StringTokenizer st;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
coordinates[i][0] = Integer.parseInt(st.nextToken()); // x
coordinates[i][1] = Integer.parseInt(st.nextToken()); // y
}
// 정렬 조건 부여
Arrays.sort(coordinates, (a, b) -> {
if (a[0] != b[0]) {
return a[0] - b[0]; // x 값 기준 오름차순 정렬
} else {
return a[1] - b[1]; // y 값 기준 오름차순 정렬
}
});
// 출력
for (int[] coord : coordinates) {
System.out.println(coord[0] + " " + coord[1]);
}
}
}
키 포인트
Arrays.sort()는 정렬 메서드다. 기본적으로는 오름차순으로 정렬하나, 두 번째 파라미터로 정렬 기준을 제공할 수 있다. 위 코드에서는, 두 번째 파라미터에 해당하는 (a, b) -> { ... }는 람다 표현식을 사용해 마치 Comparator 인터페이스의 compare() 메서드를 구현한다. if 문에서 x 값이 다른 경우 x 값을 기준으로 오름차순 정렬하고, x 값이 같은 경우 y 값을 기준으로 오름차순 정렬한다.
a[0] - b[0]가 양수가 되면, 이는 a가 b보다 크다는 의미로 해석되어 a가 뒤로 가야 한다는 뜻이다. 당연하게도 0인 경우 바뀌지 않고, 음수인 경우 a가 앞에 가야 한다는 뜻이다. 두 숫자 사이 차이를 계산하여 반환하는 방식은 Comparator에서 요구하는 정렬 기준을 따르는 방식이므로, 오름차순 정렬이다.
728x90
'프로그래밍 > 풀었어, 백준' 카테고리의 다른 글
[Java] 백준 10814번: 나이순 정렬 (1) | 2025.01.22 |
---|---|
[Java] 백준 2609번: 유클리드 호제법 (1) | 2025.01.15 |
[Java] 백준 2775번: 2차원 배열 (0) | 2025.01.14 |
[Java] 백준 15829번: BigInteger (0) | 2025.01.13 |
[Java] 백준 2750번: 오름차순 정렬하기 (0) | 2025.01.09 |