백준 11650 : 좌표 정렬하기

전준형·2021년 4월 28일
0

백준

목록 보기
21/27

문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

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

출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
BOJ11650

접근

한 좌표의 x,y 값을 이차원 배열로 저장하거나, 새로운 객체를 하나 만들어 낸 뒤 객체를 정렬하는 방법을 묻는 문제이다.

해당 문제에서는 x 조건뿐만 아니라 y조건도 고려하여야 하므로, 정렬 기준을 조금 다르게 해야한다. comparator를 사용하는것이 제일 알맞아보였다.

Arrays.sort() 메서드에 추상클래스로 comparator를 만들어 사용했다. x조건 뿐만 아니라 y조건까지 상정해야 하는 것이 포인트였다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		int n = Integer.parseInt(bf.readLine());
		Coordi [] co = new Coordi[n];
		
		for(int i = 0; i < n; i++) {
			st = new StringTokenizer(bf.readLine());
			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());
			co[i] = new Coordi(x,y);
		}
		
		Arrays.sort(co, new Comparator<Coordi>() {
			public int compare(Coordi o1, Coordi o2) {
				if(o1.x != o2.x) {
					return o1.x - o2.x;
				}
				else {
					return o1.y - o2.y;
				}
			}
		});
		
		for(Coordi c : co) {
			System.out.println(c.x + " " + c.y);
		}
	}
	
	public static class Coordi {
		int x;
		int y;
		
		public Coordi(int x, int y) {
			this.x = x;
			this.y = y;
		}
	}
}
profile
한방에 맞게 해주세요

0개의 댓글

관련 채용 정보