[Java]伯俊11650号



这是白峻11650号。


座標の整列


質問する


2 D平面上のN個の点を与える.x座標のインクリメント順に座標を並べ、x座標が同じ場合はy座標のインクリメント順に座標を並べ、プログラム出力を記述します.

入力


第1行は、点の個数N(1≦N≦100000)を与える.2行目から、N行においてi番点の位置xiとyiが与えられる.(−1000≦xi,yi≦100000)座標は常に整数であり、2つの位置が同じ点はない.

しゅつりょく


最初の行から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 X = Integer.parseInt(br.readLine());
	        
	        int arr[][] = new int[X][2];
	        
	        StringTokenizer st;
	        
	        for(int i=0; i<X; i++) {
	        	st = new StringTokenizer(br.readLine());
	        	arr[i][0] = Integer.parseInt(st.nextToken());
	        	arr[i][1] = Integer.parseInt(st.nextToken());
	        }
	        
	        br.close();
	        
	        Arrays.sort(arr, (n1, n2) -> {
	        	if(n1[0] == n2[0])
	        		return n1[1] - n2[1];
	        	else
	        		return n1[0] - n2[0];
	        });
	        
	        for(int i=0; i<X; i++)
	        	System.out.println(arr[i][0] + " " + arr[i][1]);
	}
}

に答える

2차원 배열Arrays.sort()でソートできません.でもArrayssort()内部はcompare関数とcomparatorを用い,오버라이딩により2次元配列を並べ替えることができる.今回はその方法も良かったのですが、람다식を用いてソートしました.
同様であるが,ラムダ式は別の実装方法を必要とせず,直接関数として用いることができる.つまり、使いやすいということです.
x座標が同じ場合にy座標を比較するのでifelse文を用いて解決した.
文字列分離はStringTokenizerを用いてStringTokenizerを生成するとともに、1行BufferedReader.readLine()を入力し、スペース("")で区切る.