코드: https://github.com/kgh128/Problem-Solving/blob/main/src/Baekjoon/p11650.java
Pair 클래스 구현두 개의 데이터를 쌍으로 저장할 수 있는 Pair 클래스를 구현하였다. java 14에서는 아래와 같이 모든 필드가 final이고, 각 필드에 대해 getter를 가지고 있으면 record 타입의 클래스로 변경이 가능하다. 그러나 백준 채점은 java 11로 컴파일하기 때문에 아래와 같이 클래스로 만들었다. record로 만들면 확실히 코드가 훨씬 간결해지는 것 같다.
private static class Pair {
private final int x;
private final int y;
public Pair(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
record 클래스로 만들었을 경우의 코드는 아래와 같다.
private record Pair(int x, int y) {}
// record 클래스의 getter
pair.x();
pair.y();
record를 쓰지 못한다면 다음에는 그냥 이차원 배열을 사용하는 것이 나을 것 같다. 클래스 구현할 시간에 이차원 배열 쓰는 것이 더 빠를 듯하다.
Pair 타입 ArrayList 만들기가변배열인 ArrayList를 사용하였다. (일반적으로 사용하는 배열은 크기가 고정되어 있다.) 입력을 받아서 pairs에 저장하였다.
int N = Integer.parseInt(br.readLine());
ArrayList<Pair> pairs = new ArrayList<>(N);
for (int i = 0; i < N; i++) {
String[] input = br.readLine().split(" ");
int x = Integer.parseInt(input[0]);
int y = Integer.parseInt(input[1]);
pairs.add(new Pair(x, y)); // ArrayList에 원소 추가 방법
}
위의 조건들에 맞게 정렬한다. 람다 함수를 sort()의 인자로 주어서 정렬한다.
pairs.sort((a, b) -> {
if (a.getX() == b.getX()) return a.getY() - b.getY();
else return a.getX() - b.getX();
});
버퍼에 정렬된 결과를 넣어서 출력하였다.
for (Pair pair: pairs) {
bw.append(pair.getX()).append(' ').append(pair.getY()).append('\n');
}
System.out.print(bw);