본문 바로가기

CodingTEST

[백준 11651] 좌표 정렬하기 2 (JAVA)

반응형

백준 11651번 문제 - 좌표 정렬하기 2

 

11651번: 좌표 정렬하기 2

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

www.acmicpc.net


문제 분석

 

 

  • 2차원 평면 위의 점 N개가 주어진다.
  • 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력해라.

 

해결 키 포인트

 

  • 위치 정보(int x, y)를 담는 클래스(Point) 생성
  • 클래스가 implements Comparable<Point> 하도록 한다.
    • 정렬 방법: y가 증가하는 순으로, y가 동일할 경우 x가 증가하는 순으로 !
  • 출력을 쉽게하기 위해 Point의 toString을 override하기

코드

 

 

import java.io.*;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        Point [] points = new Point[N];
        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            points[i] = new Point(x,y);
        }

        Arrays.sort(points);

        for (int i = 0; i < N; i++) {
            System.out.println(points[i]);
        }

    }

    public static class Point implements Comparable<Point> {
        int x;
        int y;

        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }

        @Override
        public int compareTo(Point p) {
            if(y == p.y) {
                return x - p.x;
            }
            return y - p.y;
        }

        @Override
        public String toString() {
            return x + " " + y;
         }
    }
}
반응형