맨처음에는 이렇게 풀었다.
근데 시간초과..ㅠ.ㅠ
import java.util.Scanner;
public class Main {
static int x[];
static int y[];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
x = new int[n];
y = new int[n];
for (int i = 0; i < n; i++) {//입력
x[i] = sc.nextInt();
y[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {//비교해서 순서바꾸기
for (int j = 0; j < i; j++) {
if (x[i] < x[j]) {
changeOrder(i, j);
} else if (x[i] == x[j]) {
if (y[i] < y[j]) {
changeOrder(i, j);
}
}
}
}
for (int i = 0; i < n; i++) {//출력
System.out.println(x[i] + " " + y[i]);
}
}
static void changeOrder(int i, int j) {//순서 바꾸기
int temp = x[i];
x[i] = x[j];
x[j] = temp;
temp = y[i];
y[i] = y[j];
y[j] = temp;
}
}
그래서 Comparator 클래스를 이용한 sort로 사용해서 다시 풀었다! 그랬더니 정답!
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int xy[][] = new int[n][2];
for (int i = 0; i < n; i++) {// 입력
xy[i][0] = sc.nextInt();
xy[i][1] = sc.nextInt();
}
Arrays.sort(xy, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0]) {// x값이 같다면
return Integer.compare(o1[1], o2[1]);// y값 비교
} else {// x값이 다르면
return Integer.compare(o1[0], o2[0]);// x값 비교
}
}
});
for (int i = 0; i < n; i++) {// 출력
System.out.println(xy[i][0] + " " + xy[i][1]);
}
}
}
그냥 sort만 알았었는데... Comparator 클래스를 사용하면 기본 정렬 방식(오름차순) 외에 다른 정렬 기준을 두어 정렬을 할 수 있었다! (다른 기준으로 정렬하고 싶을 때 사용할 수 있다.)
Comparator 클래스를 생성하고 compare 메서드에 원하는 정렬 기준을 두어 정렬하도록 했다.
(compare 메서드는 전달된 두 객체를 비교하는 메서드.)
그래서 나는 compare 메서드에 두 좌표를 비교하여 x가 같으면 y를 비교하고 그 외에는 x를 비교하여 정렬하도록 했다.
Comparator 클래스 참조한 블로그👇
https://m.blog.naver.com/occidere/220918234464
[정렬] Comparable과 Comparator
자바에서 정렬을 하다 보면 Comparable과 Comparator를 자주 마주치게 된다. 본 게시글에서는 Comparabl...
blog.naver.com
'알고리즘 > 백준' 카테고리의 다른 글
백준 1181 단어 정렬 자바 (0) | 2020.02.26 |
---|---|
백준 11651 좌표 정렬하기 2 자바 (0) | 2020.02.20 |
백준 1427 소트인사이드 자바 (0) | 2020.02.18 |
백준 2108 통계학 자바 (0) | 2020.02.12 |
백준 10989 수 정렬하기 3 자바 (0) | 2020.01.31 |
댓글