백준 11651 좌표 정렬하기 2 문제풀이 (JAVA)

문제 링크

문제


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

입력


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

출력


첫째 줄부터 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;
    }
}

좋은 웹페이지 즐겨찾기