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);
}
}
}
느낀 점
저번에 같은 문제를 접했을 때는 풀지 못했다. 이번에 두 번째 풀이인데 확실히 문제를 많이 푸는 게 중요한 것 같다. 이번에는 한 번에 풀 수 있었다.