[Java] 백준 11651번

백준 11651번

좌표 정렬하기 2

문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

출력

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

예제

코드

import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		int arr[][] = new int[N][2];
		
		StringTokenizer st;
		
		for(int i=0; i<N; i++) {
			st = new StringTokenizer(br.readLine());
			arr[i][1] = Integer.parseInt(st.nextToken());
			arr[i][0] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(arr, (e1, e2) -> {
			if(e1[0] == e2[0])
				return e1[1] - e2[1];
			else
				return e1[0] - e2[0];
		});
		
		for(int i=0; i<N; i++)
			System.out.println(arr[i][1] + " " + arr[i][0]);
	}
}

풀이

BufferedReader은 한 줄 기준으로 읽기 때문에 StringTokenizer로 토큰을 받기 전에 br.readLine()을 해줘야 한다.

지난번 좌표 정렬하기 1편과 다른점이 단순히 y축을 우선 기준으로 따진다는 것이다.
입력을 반대로 y자리에 x값을 받고 똑같이 람다식을 이용하여 Arrays.sort()을 계산한 후, 거꾸로 출력해주면 된다 (arr[][1] 먼저)

좋은 웹페이지 즐겨찾기