본문 바로가기
알고리즘/백준

백준 11650 좌표 정렬하기 자바

by reumiii 2020. 2. 19.

맨처음에는 이렇게 풀었다.

근데 시간초과..ㅠ.ㅠ

import java.util.Scanner;

public class Main {
	static int x[];
	static int y[];

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		x = new int[n];
		y = new int[n];

		for (int i = 0; i < n; i++) {//입력
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		}

		for (int i = 0; i < n; i++) {//비교해서 순서바꾸기
			for (int j = 0; j < i; j++) {
				if (x[i] < x[j]) {
					changeOrder(i, j);
				} else if (x[i] == x[j]) {
					if (y[i] < y[j]) {
						changeOrder(i, j);
					}
				}
			}
		}

		for (int i = 0; i < n; i++) {//출력
			System.out.println(x[i] + " " + y[i]);
		}

	}

	static void changeOrder(int i, int j) {//순서 바꾸기
		int temp = x[i];
		x[i] = x[j];
		x[j] = temp;

		temp = y[i];
		y[i] = y[j];
		y[j] = temp;
	}
}

 

 

그래서 Comparator 클래스를 이용한 sort로 사용해서 다시 풀었다! 그랬더니 정답!

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int xy[][] = new int[n][2];

		for (int i = 0; i < n; i++) {// 입력
			xy[i][0] = sc.nextInt();
			xy[i][1] = sc.nextInt();
		}

		Arrays.sort(xy, new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if (o1[0] == o2[0]) {// x값이 같다면
					return Integer.compare(o1[1], o2[1]);// y값 비교
				} else {// x값이 다르면
					return Integer.compare(o1[0], o2[0]);// x값 비교
				}
			}
		});

		for (int i = 0; i < n; i++) {// 출력
			System.out.println(xy[i][0] + " " + xy[i][1]);
		}

	}
}

 

그냥 sort만 알았었는데... Comparator 클래스를 사용하면 기본 정렬 방식(오름차순) 외에 다른 정렬 기준을 두어 정렬을 할 수 있었다! (다른 기준으로 정렬하고 싶을 때 사용할 수 있다.)

 

Comparator 클래스를 생성하고 compare 메서드에 원하는 정렬 기준을 두어 정렬하도록 했다.

(compare 메서드는 전달된 두 객체를 비교하는 메서드.)

그래서 나는 compare 메서드에 두 좌표를 비교하여 x가 같으면 y를 비교하고 그 외에는 x를 비교하여 정렬하도록 했다.

 

 

 

 

Comparator 클래스 참조한 블로그👇

https://m.blog.naver.com/occidere/220918234464

 

[정렬] Comparable과 Comparator

자바에서 정렬을 하다 보면 Comparable과 Comparator를 자주 마주치게 된다. 본 게시글에서는 Comparabl...

blog.naver.com

 

 

 

 

댓글