본문 바로가기
혼자 공부하는 것들/알고리즘

백준 java) 11650번 문제 좌표 정렬하기

by applepick 2020. 9. 21.
반응형

문제를 한번 볼까요?

www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

여기서 보면 2차원 평면 위에 점 N개가 주어지고, X좌표를 증가하는 순, 같으면 Y좌표가 증가하는 순서로 정렬하는 것입니다.

저는 자바로 구현했습니다.

import java.util.*;

public class Main {
	public static void main(String[] arg) {
		Scanner input = new Scanner(System.in);
		int N = input.nextInt();
		
		int[][] GCS = new int[N][2];
		for(int i=0;i<N;i++) {
			GCS[i][0] = input.nextInt();
			GCS[i][1] = input.nextInt();
		}
		
		Arrays.sort(GCS, new Comparator<int []>() {
			@Override
			public int compare(int[] n1,int[] n2) {
				if(n1[0]== n2[0])return Integer.compare(n1[1], n2[1]);
				return Integer.compare(n1[0],n2[0]);
			}
		});
		for(int i=0;i<N;i++) {
			System.out.println(GCS[i][0]+" "+GCS[i][1]);
		}
		
	}
	
}

 

이렇게 2차원 배열로 선언한후 sort함수를 통해 정렬해줍니다. 배열을 선언하여 값을 넣어줍니다. 만약 x좌표가 같다면 값을 리턴해줍니다. 아니면 X좌표를 값을 리턴해줍니다. 이러한 로직으로 정렬을 계속해줍니다. 마지막으로 출력해주고 끝내줍니다. 시간 복잡도는 빅오 표기법으로 O(N^2)이 될 것 같습니다.

 

반응형

댓글