순간을 기록으로

[Java] 좌표 정렬 본문

Problem Solving

[Java] 좌표 정렬

luminous13 2022. 1. 19. 13:15

문제

풀이

좌표를 정렬할 수 있는지에 관한 문제다. x를 기준으로 오름차순으로 정렬하되 만약 값이 같다면 y를 기준으로 정렬해야 한다. 좌표는 x와 y로 이루어져 있다. 즉 독립적인 변수 한 개가 아니고 두 개로 구성된다. 따라서 객체를 만들어 관련된 두 변수를 갖게 만들고 객체를 정렬하기 위해 Comparable 인터페이스 compareTo() 메서드를 구현해야 한다.

코드

package 인프런.정렬과검색.좌표정렬.방법1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

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 ob) {
        if (this.x == ob.x)
            return y - ob.y;
        return x - ob.x;
    }
}

public class Main {
    public ArrayList<Point> solution(int n, int[][] arr) {
        ArrayList<Point> list = new ArrayList<>();  // 리스트 선언
        for (int i=0; i<n; i++) {   // 리스트에 담기
            list.add(new Point(arr[i][0], arr[i][1]));
        }

        Collections.sort(list);

        return list;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] arr = new int[n][2];

        for (int i=0; i<n; i++) {
            arr[i][0] = in.nextInt();
            arr[i][1] = in.nextInt();
        }

        for (Point p : T.solution(n, arr)) {
            System.out.println(p.x + " " + p.y);
        }
    }
}

느낀 점

저번에 같은 문제를 접했을 때는 풀지 못했다. 이번에 두 번째 풀이인데 확실히 문제를 많이 푸는 게 중요한 것 같다. 이번에는 한 번에 풀 수 있었다.

'Problem Solving' 카테고리의 다른 글

[Java] 계단오르기  (0) 2022.01.25
[Java] 송아지 찾기  (0) 2022.01.19
[Java] 응급실  (0) 2022.01.19
[Java] 부분집합 구하기  (0) 2022.01.18
[Java] 장난꾸러기  (0) 2022.01.17
Comments