반응형
백준 11650번 좌표 정렬하기 https://www.acmicpc.net/problem/11650
11650번: 좌표 정렬하기
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net

arr[0][0]과 arr[1][0]의 값이 같다면 arr[0][1] 값과 arr[1][1] 값을 비교하여 작은 값을 먼저 출력하면 된다.
즉, 오름차순 + 오름차순
Arrays.sort(arr);
// I cannot be cast to class java.lang.Comparable
2차원 배열을 이런 식으로 정렬한다면 주석과 같은 오류가 뜬다.
1. Comparator로 정렬
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]==o2[0] ? o1[1]-o2[1] : o1[0]-o2[0];
}
});
2. 람다식 정렬
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr, (o1, o2) -> { return o1[0]==o2[0] ? o1[1]-o2[1] : o1[0]-o2[0]; });
람다식이 훨씬 간결한 코드로 작성된다.
* o1, o2의 타입이 int로 같으므로 타입을 작성하지 않아도 됨.
🔍간단하게 더 알아보기
1. Comparable VS Comparator
Comparable - this.val 와 o.val를 비교 (자기 자신과 매개변수를 비교), compareTo 메소드 필요
Comparator - 두 매개변수를 비교
나의 가상 스승님이신 블로거님의 정리. 흐릿해지면 정독해
https://st-lab.tistory.com/243
2. Collections.sort()
Arrays.~~만 쓰지말고 다른 것도 써보자!
반응형
'JAVA' 카테고리의 다른 글
postgresql bytea 파일 데이터 다운로드 (0) | 2023.06.12 |
---|---|
[JAVA] Stack 사용하기 (0) | 2022.08.25 |
[JAVA] 2231번 분해합 (브루트포스 알고리즘) (0) | 2022.08.04 |
[JAVA] 1259번 팰린드롬수 (0) | 2022.08.03 |
[JAVA] 프로그래머스 Lv.2 가장 큰 수 (정렬) (0) | 2022.08.02 |