반응형
🔺 문제
11651번: 좌표 정렬하기 2
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
🔺 코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
var br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[][] arr = new int[n][2];
for(int i = 0 ; i < n ; i++) {
var st = new StringTokenizer(br.readLine()," ");
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
// y좌표가 증가하는 순으로 정렬
// y좌표가 같으면 x좌표가 증가하는 순으로 정렬
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[1] == o2[1])
return o1[0] - o2[0];
else
return o1[1] - o2[1];
}
});
var sb = new StringBuilder();
for(int i = 0 ; i < n ; i++) {
sb.append(arr[i][0]).append(" ").append(arr[i][1]).append("\n");
}
System.out.println(sb);
}
}
✅ 해결 아이디어
- 2차원 배열 정렬 (Arrays.sort(배열, 비교할 인자)
)
① Arrays.sort()에서 Comparator 인터페이스 사용 ✔
② Arrays.sort() 람다식 사용
y 좌표가 증가하는 순으로.
y좌표가 같으면 x좌표가 증가하는 순서로 정렬.
람다식 사용하면 이렇게...
Arrays.sort(arr, (e1, e2) -> {
if(e1[1] == e2[1]) {
return e1[0] - e2[0];
} else {
return e1[1] - e2[1];
}
});
11650번 좌표 정렬하기랑 완전 같다.
11650번은 x좌표가 증가하는 순 정렬이었는데
이걸 y좌표가 증가하는 순 정렬로 바꿔주면 된다.
![](https://blog.kakaocdn.net/dn/tEsVA/btr42TiKUtk/20omOdJSH63nGaAJLv4x6k/img.png)
(참고)
- 11650번: 좌표 정렬하기 문제
[백준/JAVA] 11650번: 좌표 정렬하기
🔺 문제 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고,
bono039.tistory.com
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 10814번: 나이순 정렬 (0) | 2023.03.22 |
---|---|
[백준/JAVA] 1181번: 단어 정렬 (0) | 2023.03.21 |
[백준/JAVA] 11650번: 좌표 정렬하기 (0) | 2023.03.21 |
[백준/JAVA] 10989번: 수 정렬하기 3 (0) | 2023.03.21 |
[백준/JAVA] 2108번: 통계학 (0) | 2023.03.20 |