일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[BOJ] 백준 11650번 - 좌표 정렬하기 본문
728x90
문제
https://www.acmicpc.net/problem/11650
✔ Key Point
- 2차원 배열 정렬
풀이
- 한 점의 x좌표, y좌표를 하나로 묶어 1차원 배열로, 이러한 점들을 2차원 배열로 저장
- 아래 [예제 입력 1] 의 좌표 값들을 2차원 배열로 저장하면 { {3, 4}, {1, 1}, {1, -1}, {2, 2}, {3, 3} }
5 3 4 1 1 1 -1 2 2 3 3
- 각 점을 x좌표를 기준으로 오름차순 정렬, x좌표가 같을 경우 y좌표를 기준으로 오름차순 정렬
- 배열을 정렬하는 Arrays.sort() 메서드 호출 시 비교 기준 Comparator를 정해준다.
1차원 배열 정렬
- Arrays.sort() 메서드를 사용해 배열 요소를 오름차순으로 정렬
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] pos = { 3, 1, 1, 2, 3 };
Arrays.sort(pos);
System.out.println(Arrays.toString(pos));
}
}
[1, 1, 2, 3, 3]
2차원 배열 정렬
- x좌표를 기준으로 오름차순 정렬
- Comparator.comparingInt() 메서드를 사용해 비교 기준 요소를 지정
(x좌표 = 2차원 배열의 각 요소인 1차원 배열에서 첫번째 값)
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
int[][] pos = { {3, 4}, {1, 1}, {1, -1}, {2, 2}, {3, 3} };
Arrays.sort(pos, Comparator.comparingInt(o1 -> o1[0]));
for(int[] arr : pos) {
System.out.println(Arrays.toString(arr));
}
}
}
[1, 1]
[1, -1]
[2, 2]
[3, 4]
[3, 3]
- x좌표 기준으로 오름차순 정렬, x좌표가 같을 경우 y좌표로 오름차순 정렬
- 람다식을 사용해 Comparator를 직접 정의
o1, o2 = 정렬 대상인 2차원 배열 pos의 각 요소 = x, y좌표를 저장하고 있는 각 1차원 배열
두 1차원 배열에서 x좌표끼리, y좌표끼리 차례로 대소 비교 수행
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][] pos = { {3, 4}, {1, 1}, {1, -1}, {2, 2}, {3, 3} };
Arrays.sort(pos, (o1, o2) -> {
if(o1[0] == o2[0])
return Integer.compare(o1[1], o2[1]);
else
return Integer.compare(o1[0], o2[1]);
});
for(int[] arr : pos) {
System.out.println(Arrays.toString(arr));
}
}
}
[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);
StringBuffer sb = new StringBuffer();
int N = sc.nextInt();
int[][] pos = new int[N][2]; //좌표 배열
for(int i = 0; i < N; i++) {
pos[i][0] = sc.nextInt(); //x좌표
pos[i][1] = sc.nextInt(); //y좌표
}
//int[][] 의 비교대상인 요소 o1, o2는 각각 int[] 타입
Arrays.sort(pos, (o1, o2) ->{
if(o1[0] == o2[0])
return Integer.compare(o1[1], o2[1]);
else
return Integer.compare(o1[0], o2[0]);
});
for(int[] arr : pos) {
sb.append(String.format("%d %d\n", arr[0], arr[1]));
}
System.out.println(sb);
}
}
728x90
'Algorithm' 카테고리의 다른 글
DP - 개미 전사 (0) | 2021.12.13 |
---|---|
[BOJ] 백준 11652번 - 카드 (0) | 2021.11.30 |
[BOJ] 백준 1463번 - 1로 만들기 (Java) (0) | 2021.11.15 |
[BOJ] 백준 10808번 - 알파벳 개수 (Java) (0) | 2021.11.15 |
[BOJ] 백준 2445번 - 별 찍기 8 (0) | 2021.11.11 |
Comments