水平11650:座標を整列



質問リンク
入力した2つの座標を2列に入れて、Comparatorで並べ替えると、簡単に解くことができます.

Javaを使用した解答

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class BaekJoon11650 {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		int[][] locs = new int[n][2];					
		
		for(int i = 0; i < n; i++) {		//2차원 배열에 입력받은 수 저장
			StringTokenizer st = new StringTokenizer(br.readLine());
			locs[i][0] = Integer.parseInt(st.nextToken());
			locs[i][1] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(locs, new Comparator<int[]>() {
			
			@Override
			public int compare(int[] i1, int[] i2) {
				if(i1[0] == i2[0]) {		//첫번째 배열이 동일할 경우
					return i1[1] - i2[1];	//두번째 배열 오름차순 정렬
				} else {					//첫번째 배열이 동일하지 않을 경우
					return i1[0] - i2[0];	//첫번째 배열 오름차순 정렬
				}
			}
			
		});
		
		for(int i = 0; i < n; i++) {
			bw.write(locs[i][0] + " " + locs[i][1] + "\n");
		}
		
		bw.flush();
		
	}
}