整列レベル11651座標2題(JAVA)


質問リンク

質問する


2 D平面上のN個の点を与える.座標がy座標のインクリメンタルである場合、x座標のインクリメンタルでソートし、プログラム出力を記述します.

入力


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

しゅつりょく


最初の行からN行の位置合わせの結果を出力します.

に答える


前回の座標の整列題とXを除いて、Yが変えた問題は同じです.
座標値クラスを作成し、Yでソートし、Y値が同じ場合はXでソートします.

ソースコード

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

public class Main{
    public static void main(String [] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int N = Integer.parseInt(br.readLine());
        ArrayList<Location> lc = new ArrayList<Location>();
        int xTemp;
        int yTemp;
        StringTokenizer st;
        for(int i=0;i<N;i++) {
            st = new StringTokenizer(br.readLine());
           xTemp = Integer.parseInt(st.nextToken());
           yTemp = Integer.parseInt(st.nextToken());

            lc.add(new Location(xTemp, yTemp));
        }
        
        Collections.sort(lc);
     
       for(Location l : lc){
           
           bw.write(l.getX()+" "+l.getY()+"\n");
       }
        
        
        bw.flush();
	br.close();
	bw.close();
        
        
    }
    
}

class Location implements Comparable<Location> {
    private int x;
    private int y;
    public Location(int x, int y) {
        this.x = x;
        this.y = y;
    }
    @Override
    public int compareTo(Location l) {
       if(this.y>l.getY()){
           return 1;
       }else if(this.y == l.getY()) {
           if(this.x>l.getX()) {
               return 1;
           }else {
               return -1;
           }
       }else {
           return -1;
       }
    }
    
    public int getX() {
        return x;
    }
    public int getY() {
        return y;
    }
}