[백준/JAVA] 정렬 - 11650번 좌표 정렬하기

신승현·2022년 9월 14일
0

더 좋은 문제 풀이가 있거나 궁금하신 점이 있다면 편하게 댓글 남겨주세요!


📝 문제


11650번 좌표 정렬하기


🤷‍♂️ 접근 방법


문제를 보자마자 2차원 배열을 정렬하면 되겠다 라는 생각이 들었습니다. 그러나 기존에 사용하던 Arrays.sort 로는 2차원 배열을 정렬할 수 없습니다. 그래서 여러 검색을 통해 Arrays.sort을 오버라이드 해야 한다는 사실을 알았고 아래의 내용부터는 제가 이해한 내용을 바탕으로 정리해보겠습니다.

📌 Arrays.sort로 2차원 배열 정렬

Array.sort의 자바 API를 보면 위의 그림과 같습니다. 먼저 첫번째 매개변수로 객체 배열 T[] a 가 있습니다. T 는 제너릭 타입으로 모든 타입이 다 올 수 있다는 뜻이고 a는 배열의 이름입니다. 이번 문제에서는 2차원 배열을 사용할 것이니 T[]는 2차원 배열 int[][]을 의미하게 될 것입니다.

다음으로 두번째 매개변수로 Comparator<? super T> c 이 있습니다. Comparator는 정렬 시, 우선순위를 정하는 부분으로 우선순위에 따라 두 매개변수 객체를 비교합니다. 이 부분을 오버라딩하면 y좌표를 오름차순으로 정렬할 수 있겠습니다.

아래의 코드는 compare 함수를 오버라이딩 한 코드입니다. Arrays.sort()함수 내부에서는 정렬을 위해 두 매개변수를 비교할 때 어떤 변수가 우선순위가 높은지 compare() 함수를 통해 판별하고 위치를 바꿀 것입니다.

    Arrays.sort(arr, new Comparator<int[]>() {
        @Override
        public int compare(int[] o1, int[] o2) {
            if(o1[0] == o2[0]) return o1[1] - o2[1];
            else return o1[0] - o2[0];

        }
    });

✍ 풀이


import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();

        int arr[][] = new int [N][2];

        //x,y 좌표 입력
        for(int i=0; i< N; i++){

            arr[i][0] = sc.nextInt(); //x
            arr[i][1] = sc.nextInt(); //y
        }

        //정렬
        Arrays.sort(arr, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0] == o2[0]) return o1[1] - o2[1];
                else return o1[0] - o2[0];

            }
        });


        //출력
        for(int i = 0 ; i< N; i++){
            System.out.println(arr[i][0] + " " + arr[i][1]);
        }


    }
}

profile
I have not failed. I've just found 10,000 ways that won't work. - Thomas A. Edison

0개의 댓글