한 걸음 두 걸음
백준 11650 좌표 정렬하기 JAVA로 풀기 본문
반응형
좌표 정렬하기
문제
2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
문제해석
N개의 (x, y)값을 받고 이를 x좌표 값이 작은 순으로 정렬시키는 문제.
(만약 같은 x좌표를 가졌다면, y값이 작은 순으로 정렬시킨다.)
예)
입력 : (3, 4) (1, 1) (1, -1) (2, 2) (3, 3)
출력 : (1, -1) (1, 1) (2, 2) (3, 3) (3, 4)
답안 소스코드
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
XY xys[] = new XY[N];
for (int i = 0; i < N; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
xys[i] = new XY(x, y);
}
Arrays.sort(xys);
for (int i = 0; i < N; i++) {
System.out.println(xys[i].getX() + " " + xys[i].getY());
}
}
}
class XY implements Comparable {
private int x;
private int y;
XY(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public int compareTo(Object o) {
XY mXY = (XY) o;
if (mXY.x > x)
return -1;
else if (mXY.x < x)
return 1;
else if (mXY.x == x) {
if (mXY.y > y)
return -1;
else if (mXY.y < y) {
return 1;
} else
return 0;
}
return 0;
}
}
JAVA에서 정렬할 때 지원하는 Comparable를 활용하여 풀었다.
class XY implements Comparable {
private int x;
private int y;
XY(int x, int y) {
this.x = x;
this.y = y;
}
x, y값을 받는 class XY를 만들고
XY xys[] = new XY[N];
for (int i = 0; i < N; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
xys[i] = new XY(x, y);
}
객체 인스턴스를 배열로 N개만큼 만들었다.
@Override
public int compareTo(Object o) {
XY mXY = (XY) o;
if (mXY.x > x)
return -1;
else if (mXY.x < x)
return 1;
else if (mXY.x == x) {
if (mXY.y > y)
return -1;
else if (mXY.y < y) {
return 1;
} else
return 0;
}
return 0;
}
정렬을 시키기 위해 내가 만든 XY클래스에 Comparable인터페이스를 implements시키고 정렬 기준을 x, x값이 같다면 y로 두었다.그러면
Arrays.sort(xys);
이를 통해 정렬된다.
이에 대한 자세한 내용은 https://onepinetwopine.tistory.com/487 포스팅으로 이론적 부분을 정리해두었다.
반응형
'CSE > baekjoon & swexpert' 카테고리의 다른 글
백준 2960 ] 에라토스테네스의 체 / JAVA풀이 (3) | 2020.01.12 |
---|---|
백준 15655 ] N과 M(6) JAVA로 풀기 (0) | 2019.12.19 |
백준 15654 ] N과 M(5) JAVA로 풀기 (0) | 2019.12.19 |
백준 15652 ] N과M(4) JAVA로 풀기 (0) | 2019.12.19 |
백준 15650 N과M (2) JAVA로 문제 풀기 (0) | 2019.12.19 |