티스토리 뷰

728x90

문제

- 점 N개가 주어짐(x, y)

- 해당 좌표들을 x 좌표가 증가하는 순으로 정렬

- x 좌표가 같으면 y 좌표가 증가하는 순서로 정렬

 

해결방법

 Point class를 만들어서 좌표를 Point 배열로 저장하였다. 해당 좌표들을 정렬하기 위해 Comparator를 만들었고, 주어진 조건대로 x 좌표가 증가하는 순으로 정렬하였다. x 좌표가 같다면 y 좌표가 증가하는 순서로 정렬할 수 있도록 조건을 주었다.

 

객체 정렬과 관련된 내용은 아래 글을 참고하면 좋을 것 같다.

 

[JAVA] Comparable / Comparator

객체들을 정렬하기 위해서는 정렬 기준이 필요하다. 단순한 숫자, 문자와 같은 기본형(primitive) 데이터는 Arrays.sort() 메서드를 이용하여 알아서 정렬할 수 있다. 하지만, 특정 타입의 객체는 정렬

sa11k.tistory.com

 

코드

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

// 좌표 class
class Point{
    int x;
    int y;

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

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());
        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);		// 좌표 입력 받아 저장
        }

	// 좌표를 정렬할 comparator
        Comparator<Point> comparator = new Comparator<Point>() {
            @Override
            public int compare(Point o1, Point o2) {
                // x 좌표가 같지 않다면 x 좌표가 증가하는 순으로 정렬
                if(o1.x != o2.x){
                    return o1.x - o2.x;
                }
                // x 좌표가 같다면 y 좌표가 증가하는 순으로 정렬
                else{
                    return o1.y - o2.y;
                }
            }
        };

	// comparator를 활용하여 배열 정렬
        Arrays.sort(points, comparator);

	// 정렬된 결과 출력
        for(int i = 0; i<N; i++){
            System.out.println(points[i].x + " " + points[i].y);
        }
    }
}
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday