백준 11650번: 좌표 정렬하기

kgh128·2023년 1월 31일

코드: https://github.com/kgh128/Problem-Solving/blob/main/src/Baekjoon/p11650.java


1. 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를 쓰지 못한다면 다음에는 그냥 이차원 배열을 사용하는 것이 나을 것 같다. 클래스 구현할 시간에 이차원 배열 쓰는 것이 더 빠를 듯하다.


2. 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에 원소 추가 방법
}

3. 정렬하기

  • x좌표가 증가하는 순서로
  • x좌표가 같으면 y좌표가 증가하는 순서로

위의 조건들에 맞게 정렬한다. 람다 함수를 sort()의 인자로 주어서 정렬한다.

pairs.sort((a, b) -> {
	if (a.getX() == b.getX()) return a.getY() - b.getY();
	else return a.getX() - b.getX();
});

4. 결과 출력

버퍼에 정렬된 결과를 넣어서 출력하였다.

for (Pair pair: pairs) {
	bw.append(pair.getX()).append(' ').append(pair.getY()).append('\n');
}
System.out.print(bw);

0개의 댓글