Java/Algorithm

[Java-Algorithm] 백준 11650 좌표 정렬하기 풀이

Jeong Jeon
반응형

문제 : https://www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

 

풀이 :

Arrays.sort를 이용하여 풀어보았다...

Comparator를 사용하면 비교가 쉬워지는데, 처음에 2차원 배열을 compare 안해봐서... 조금 당황했지만 그냥 되부렀네...~

public class Main{

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int n = Integer.parseInt(br.readLine());

		int[][] arr = new int[n][2];

		//좌표입력
		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine());
			arr[i][0] = Integer.parseInt(st.nextToken());
			arr[i][1] = Integer.parseInt(st.nextToken());
		}

		//x가 큰 순서대로,
		//x가 같다면 y가 큰순서대로
		Arrays.sort(arr, new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if(o1[0] == o2[0]) {
					return o1[1]- o2[1];
				}else {
					return o1[0]- o2[0];
				}
			}
		});

		for (int i = 0; i < arr.length; i++) {
			String result = "";
			for (int j = 0; j < 2; j++) {
				result += arr[i][j]+" ";
			};
			System.out.println(result);
			result ="";
		}
	}
}
반응형