알고리즘

[백준] 11651번 : 좌표 정렬하기 2 _ JAVA ( 주석 설명 ) 본문

백준 - JAVA/정렬

[백준] 11651번 : 좌표 정렬하기 2 _ JAVA ( 주석 설명 )

wch_s 2023. 2. 9. 12:48

1번

→ Arrays.sort(T[] a, Comparator<? super T> c) 에서

Comparator 의 compare 를 재정의 함으로써 원하는 정렬을 한다.

(11650번에서 정렬 우선순위만 다를 뿐인 문제)

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //빠른 입력을 위해 버퍼를 이용해 입력을 받는다.
        StringTokenizer st;

        StringBuilder sb = new StringBuilder(); //출력을 조금 더 빠르게 하기 위함

        int N = Integer.parseInt(br.readLine()); //점의 개수를 입력받는다.

        int[][] ary = new int[N][2]; //점의 개수만큼의 행 공간을 생성하고, 열 공간은 x∙y 좌표를 넣으므로 2로 설정한다.

        for(int i=0;i<N;++i){
            st = new StringTokenizer(br.readLine()); //개행을 하면 소모되는 객체로서 개행을 할 때마다 다시 정의해준다.
            int x = Integer.parseInt(st.nextToken()); //x좌표를 입력받는다.
            int y = Integer.parseInt(st.nextToken()); //y좌표를 입력받는다.

            //행은 좌표가 입력되는 순서를 열은 0,1 열에 x,y 좌표값을 넣는다.
            ary[i][0] = x;
            ary[i][1] = y;
        }

        Arrays.sort(ary, (a,b) -> {
            if(a[1] == b[1]){ //y좌표가 같으면 x좌표 비교하여 오름차순으로 정렬한다.
                return a[0] - b[0];
            }

            else //y좌표가 다르면 y좌표를 우선으로 비교하여 오름차순으로 정렬한다.
                return a[1] - b[1];
        });

        for(int i=0;i<N;++i){ //y좌표를 중심으로 정렬한 배열을 StringBuilder에 넣어준다.
            sb.append(ary[i][0] + " " + ary[i][1]).append('\n');
        }

        System.out.println(sb); //결과값을 출력한다.
    }
}