1 minute read




문제 풀이


이 문제는 이전 문제인 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번째 원소별로 기준을 두고 정렬하는 방법에 대해서 공부할 수 있었다.