x, y 좌표가 n개 주어진다고 하자.
x를 기준으로 오름차순 정렬하는데 만약 x가 같다면 y를 기준으로 오름차순 정렬시켜라
라고 하는 문제가 있다면 정렬 기준을 설정해주어야한다.
Comparable 인터페이스는 이러한 x, y 값을 가지는 객체간의 비교를 가능하게 해준다.
import java.util.*;
class Coords implements Comparable<Coords> {
public int x, y;
Coords(int x, int y) {
this.x = x;
this.y = y;
}
// x값에 의해 정렬하고, x값이 같을 경우 y값에 의해 정렬한다.
// CompareTo에서 양수를 리턴 : 두 객체의 자리가 바뀐다.
// 음수 or 0을 리턴 : 두 객체의 위치가 바뀌지 않는다.
@Override
public int compareTo(Coords coords) {
// 자기 자신의 x가 coords의 x보다 크다면 양수 리턴, 같다면 y를 비교해서 오름차순
if (this.x == coords.x) return this.y - coords.y;
else return this.x - coords.x; // 오름차순
}
}
class Main {
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Coords> arr = new ArrayList<>();
for(int i=0; i<n; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
arr.add(new Coords(x, y));
}
Collections.sort(arr);
for(Coords c : arr) {
System.out.println(c.x + " " + c.y);
}
}
}
x값이 같을 경우 this.y - coords.y를 리턴시킨다.
this.y - coords.y가 양수일 경우( 2 1 -> 1 2 ) / 음수일 경우 ( 1 2 -> 그대로 1 2 )
즉, y값을 기준으로 오름차순 정렬시킨다는 것이다.
'Java 코딩테스트 공부 > Java 코테 나만의 팁' 카테고리의 다른 글
[정렬] 내림차순 Arrays.sort(arr, Collections.reverseOrder()); (0) | 2022.10.20 |
---|---|
[정렬] 시간복잡도 O(N)를 가진 정렬 풀이법 (0) | 2022.10.20 |