알고리즘 공부/정렬(Sort) | 분류

백준 11650(좌표 정렬하기)

kdhoooon 2020. 12. 21. 21:29

문제


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

 

 

풀이


Collections.sort 를 사용해서 정렬을 사용 하였고 sort 메소드의 정렬기준을 재정의 해주었다.

 

 

<코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class point{
	
	int x;
	int y;
	
	public point(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	public int getX() { return this.x;}
	public int getY() { return this.y;}

}

public class Main {	
	
	public static void main(String[] args) throws IOException{
		
		int n;
		List<point> list;
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		n = Integer.parseInt(br.readLine());
		
		list = new ArrayList<point>();
		
		for(int i = 0 ; i < n ; i++) {
			String[] line = br.readLine().split("\\s");
			int x = Integer.parseInt(line[0]);
			int y = Integer.parseInt(line[1]);
						
			list.add(new point(x, y));
		}
		
		//정렬 기준 재정의
		Collections.sort(list, new Comparator<point>() {
			
			@Override
			public int compare(point p1, point p2) {
				if(p1.getX() > p2.getX()) {
					return 1;
				}
				else if(p1.getX() < p2.getX()) {
					return -1;
				}
				else if(p1.getX() == p2.getX()) {
					if(p1.getY() > p2.getY()) {
						return 1;
					}
					else {
						return -1;
					}
				}
				else {
					return 0;
				}
			}
		});
		
		StringBuilder sb = new StringBuilder();
		
		for(point value : list) {
			sb.append(value.x).append(' ').append(value.y).append('\n');
		}
		
		System.out.println(sb);
	}
}

'알고리즘 공부 > 정렬(Sort) | 분류' 카테고리의 다른 글

백준 10799 (쇠막대기)  (0) 2020.12.23
백준 9012 (괄호)  (0) 2020.12.22
백준 11652 (카드)  (0) 2020.12.22
백준 10825 (국영수)  (0) 2020.12.21
백준 2751 (정렬)  (0) 2020.12.18