[Java] 백준(실버-5) 11651번 - 좌표 정렬하기 2

문제 풀이
이 문제는 이전 문제인 11650번 좌표 정렬하기 문제를 조금 변형하여 풀 수 있다.
11650번 문제는 x, y 좌표가 있을 때 x좌표를 기준으로 오름차순 정렬하였지만, 이 문제는 y좌표를 기준으로 오름차순 정렬을 해야한다.
동일하게 Arrays.sort() 메서드를 확장하여 Comparator 메서드를 람다식으로 표현하여 작성하는데, 두 원소를 비교할 때 첫번째 원소 기준이 아닌 두번째 원소 기준으로 비교하여 정렬하면 된다.
그렇다면 코드를 작성해보자.
11650번 문제와 다른 부분은 정렬하는 과정밖에 없으니 정렬 부분만 살펴보자.
1
2
3
4
Arrays.sort(arr, (o1, o2) -> {
if(o1[1] == o2[1]) return o1[0] - o2[0];
else return o1[1] - o2[1];
});
위 코드와 같이 y좌표 기준, 즉 두번째 원소를 기준으로 오름차순 정렬하면서 y좌표가 연속으로 같다면 x좌표 기준으로 오름차순 정렬하도록 하면 된다.
2차원 배열 오름차순 정렬에 관한 자세한 내용은 이전 문제글 11650번 문제 풀이 를 참고하자.
작성코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[][] arr = new int[N][2];
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr, (o1, o2) -> {
if(o1[1] == o2[1]) return o1[0] - o2[0];
else return o1[1] - o2[1];
});
for(int i=0; i<arr.length; i++) {
bw.write(arr[i][0] + " " + arr[i][1] + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
회고
- 11650번 문제와 더불어 2차원 배열을 오름차순으로 정렬할 때, 0번째 원소와 1번째 원소별로 기준을 두고 정렬하는 방법에 대해서 공부할 수 있었다.