Algorithm/기타

[백준 11650번] 좌표 정렬하기 (Java 풀이)

agility 2020. 1. 28. 22:29

백준알고리즘 11650번 : 좌표 정렬하기

 

N개의 좌표를 오름차순으로 정렬하는 문제이다.

x좌표가 같으면 y좌표를 오름차순으로 정렬해서 출력해야한다.

정렬 조건이 추가되었기 때문에, Arrays.sort()에 Comparator 인터페이스를 재정의해서 사용해야한다.

 

 

 

풀이 과정


1. 2차원 배열에 각 좌표를 담는다.
2. Arrays.sort(arr, new Comparator<int []>){}로 Comparator를 재정의함으로써
   'x축 값이 같다면, y축 값을 비교해준다.'라는 조건식을 추가해주어 return하도록 한다.
3. 정렬된 배열을 출력한다.

 

 

 

 

소스 ▽

더보기
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {// 11650번 좌표 정렬하기
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num = Integer.parseInt(sc.nextLine());
		int[][] arr = new int[num][2];
		for (int i = 0; i < arr.length; i++) {
			arr[i][0] = sc.nextInt();
			arr[i][1] = sc.nextInt();
		}
		Arrays.sort(arr, new Comparator<int[]>() {

			@Override
			public int compare(int[] o1, int[] o2) {
				if (o1[0] == o2[0]) {
					return Integer.compare(o1[1], o2[1]);
				}

				return Integer.compare(o1[0], o2[0]);
			}

		});

		for (int[] is : arr) {
			System.out.println(is[0] + " " + is[1]);
		}

	}
}

 

 

 

Summary


1. 배열 정렬 시 Comparator 사용하기 : Arrays.sort(arr, new Comparator<>(){});
2.
Comparator 인터페이스는 다음과 같은 메서드를 사용하여 객체를 정렬한다.

  • int compare(T o1, T o2) : 전달된 두 객체의 순서를 비교
  • boolean equals(Object obj) : 해당 comparator와 전달된 객체가 같은지 확인
  • default Comparator <T> reversed() : 해당 comparator의 역순인 comparator를 반환