본문 바로가기

CodingTEST

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

반응형

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

 

11650번: 좌표 정렬하기

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

www.acmicpc.net


문제 분석

 

 

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

해결 키 포인트

 

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

코드

 

import java.io.*;
import java.lang.reflect.Member;
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 String toString() {
            return x + " " + y;
        }

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

'CodingTEST' 카테고리의 다른 글

[백준 9012] 괄호 (JAVA)  (0) 2023.11.30
[백준 11866] 요세푸스 문제 (JAVA)  (1) 2023.11.30
[백준 10814] 나이순 정렬 (JAVA)  (0) 2023.11.30
[백준 1181] 단어 정렬 (JAVA)  (0) 2023.11.30
[백준 1966] 프린터 큐 (JAVA)  (0) 2023.11.30