본문 바로가기
알고리즘/코딩 - 백준

[Java][백준][11650번] 좌표 정렬하기

by 주남2 2019. 6. 2.
반응형

문제 설명 (링크)

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

 

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

 

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

 

생각

이런 좌표가 주어지고 그 좌표의 정보가 2개 이상 주어진 경우는 클래스로 만들어서 하면 깔끔하고 좋다. 

좌표 클래스를 만들고 변수로 x,y를 준다.

 

후에 Comparable<>를 상속하여 새로운 정렬 조건을 만들어준다. 

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int n = Integer.parseInt(br.readLine());
        xy[] arr = new xy[n];
        for(int i=0; i<n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            arr[i] = new xy(Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()));
        }
        
        Arrays.sort(arr);
        
        for(int i=0; i<n; i++) {
            System.out.println(arr[i].x + " " + arr[i].y);
        }
    }
 
}
 
class xy implements Comparable<xy>  {
    int x;
    int y;
    
    public xy(int x,int y) {
        this.x = x;
        this.y = y;
    }
 
    @Override
    public int compareTo(xy arg0) {
        if(this.x == arg0.x) {
            return this.y - arg0.y;
        } else {
            return this.x - arg0.x;
        }
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 
반응형