본문 바로가기

ALGORITHM

백준 11650 좌표 정렬하기 (Java)

1. 문제 링크

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

좌표를 정렬하기 위해 클래스를 만들어서 x, y를 관리했다.

정렬을 위해 클래스에 Comparable 인터페이스를 구현한다.

그 중 compareTo()를 재정의해 x좌표 비교 후 y좌표를 비교하도록 했다.

이후에 Arrays.sort()를 이용해 배열을 재정의한 순으로 정렬한다.

 

4. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.util.Arrays;

public class Main {
	static class Point implements Comparable<Point>{
		int x;
		int y;
		
		public Point(int x, int y) {
			super();
			this.x = x;
			this.y = y;
		}

		@Override
		public int compareTo(Point o) {
			if(this.x > o.x) {
				return 1;
			}
			else if(this.x < o.x) {
				return -1;
			}
			else {
				 if(this.y > o.y) {
					 return 1;
				 }
				 else {
					 return -1;
				 }
			}
		}
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int N = Integer.parseInt(br.readLine());
		Point[] p = new Point[N];
		String[] split = new String[2];
		for(int i=0;i<N;i++) {
			split = br.readLine().split(" ");
			p[i] = new Point(Integer.parseInt(split[0]), Integer.parseInt(split[1]));
		}
		Arrays.sort(p);
		for(Point a: p) {
			sb.append(a.x+" "+ a.y).append("\n");
		}
		System.out.println(sb);
	}	
}

 

'ALGORITHM' 카테고리의 다른 글

백준 9372 상근이의 여행 (Java)  (0) 2023.03.12
백준 2789 유학 금지 (Java)  (0) 2023.03.12
백준 21608 상어 초등학교 (Java)  (0) 2023.03.11
백준 11052 카드 구매하기 (Java)  (0) 2023.03.10
백준 2096 내려가기 (Java)  (0) 2023.03.09