[작성일: 2023. 10. 19]
https://www.acmicpc.net/problem/11650
풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.valueOf(br.readLine());
int[][] arr = new int[n][2];
for (int i = 0; i < n; i++) {
String[] input = br.readLine().trim().split(" ");
arr[i][0] = Integer.parseInt(input[0]);
arr[i][1] = Integer.parseInt(input[1]);
}
Arrays.sort(arr, (arr1, arr2) -> {
if (arr1[0] == arr2[0]) {
return Integer.compare(arr1[1], arr2[1]);
}
return Integer.compare(arr1[0], arr2[0]);
});
for (int i = 0; i < n; i++) {
System.out.println(arr[i][0] + " " + arr[i][1]);
}
br.close();
}
}
이 문제를 Scanner로 풀면 시간초과 오류가 나서 BufferedReader로 풀었다.
BufferedReader로 한 줄씩 입력을 읽고, 그 줄을 공백으로 분리해서 두 정수를 2차원배열 arr에 저장한다.
정렬 부분은 람다식을 사용했는데 아직 익숙하지 않아서 구글링의 도움을 받았다.
arr 배열을 정렬하고 정렬 기준인 arr1, arr2를 람다식의 매개변수로 두 x, y 좌표를 나타냈다.
arr1[0]과 arr2[0], 즉 첫번째 x와 두번째 x 좌표를 비교해서 두 점의 좌표가 같다면 arr1[1], arr2[1], 즉 y좌표들을 비교한다.