처음부터 차근차근
class2 - 11650번 좌표 정렬하기 (자바) 본문
반응형
문제 : https://www.acmicpc.net/problem/11650
Arrays.sort함수는 1차원 배열 뿐만아니라 2차원 배열도 정렬 가능하다.
단, Comparator 객체를 써서 커스텀 해줘야한다.
문제에서 쓰인 개념
Arrays.sort로 2차원 배열 정렬.
Arrays.sort(dots, new Comparator<int[]>() { // 이차원 배열 정렬
@Override
public int compare(int[] one, int[] two) {
if (one[0] == two[0]) {
return one[1] - two[1]; // y좌표 오름차순
}
else {
return one[0] - two[0]; // x좌표 오름차순
}
}
});
Comparator 객체의 제너럴 부분에 배열을 넣어야한다.
예를들어 arr = {{1, 2}, {2, 3}, {4, 5}...}이 있다고 가정하자.
one은 {1, 2} two는 {2, 3}이고,
one[0]은 1, two[0]은 2이다.
문제 풀이
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int dotNum = Integer.parseInt(br.readLine());
int[][] dots = new int[dotNum][2];
for (int i = 0; i < dotNum; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
dots[i][0] = x;
dots[i][1] = y;
}
Arrays.sort(dots, new Comparator<int[]>() { // 이차원 배열 정렬
@Override
public int compare(int[] one, int[] two) {
if (one[0] == two[0]) { // x 좌표 비교
return one[1] - two[1]; // y좌표 오름차순
}
else {
return one[0] - two[0]; // x좌표 오름차순
}
}
});
for(int[] dot : dots) {
bw.write(String.valueOf(dot[0])+" "+String.valueOf(dot[1]) + "\n");
}
br.close();
bw.flush();
bw.close();
}
catch (IOException e) {
System.out.println("IOException 발생");
}
}
}
Arrays.sort를 쓰니 어렵지 않게 문제를 해결할 수 있었다.
반응형
'알고리즘' 카테고리의 다른 글
class2 - 10773번 제로 (자바) (0) | 2024.05.23 |
---|---|
class2 - 2775번 부녀회장이 될테야 (자바) (0) | 2024.05.23 |
class2 - 2751번 수 정렬하기2 (자바) (0) | 2024.05.23 |
class2 - 2609번 최대공약수와 최소공배수 (자바) (0) | 2024.05.23 |
class2 - 2108번 통계학 (자바) (0) | 2024.05.22 |