백준 11651번: 좌표 정렬하기 2

kgh128·2023년 1월 31일

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


1. 2차원 배열에 좌표 정리하기

  • 각 행의 0번째 원소: x좌표
  • 각 행의 1번째 원소: y좌표

이번에는 Pair 클래스를 만들지 않고, 2차원 배열에 위와 같이 좌표를 정리하였다. 따라서 한 행이 하나의 좌표 쌍이다.

int N = Integer.parseInt(br.readLine());
int[][] pairs = new int[N][2];

for (int i = 0; i < N; i++) {
	String[] inputs = br.readLine().split(" ");

	pairs[i][0] = Integer.parseInt(inputs[0]);
	pairs[i][1] = Integer.parseInt(inputs[1]);
}

2. 정렬하기

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

2차원 배열 pairsArrays.sort()와 람다 함수를 이용하여 정렬한다. 2차원 배열도 정렬 기준을 구현한 Comparator를 인자로 주면 바로 Arrays.sort()를 통해 정렬할 수 있었다. 한 행이 하나의 쌍으로 이동할 것인지가 관건이었는데 Comparator만 구현하면 가능했다.

Arrays.sort(pairs, (a ,b) -> {
	if (a[1] == b[1]) return a[0] - b[0];
	else return a[1] - b[1];
});

3. 출력하기

정렬된 배열을 버퍼에 넣어 출력했다.

for (int i = 0; i < N; i++) {
	bw.append(pairs[i][0]).append(' ').append(pairs[i][1]).append('\n');
}
System.out.print(bw);

0개의 댓글