본문으로 바로가기
글에 개요

백준 알고리즘 11650번 "좌표 정렬하기" 문제입니다.
정렬에 대한 기본 유형이며, Comparable, Comparator을 이용한 두 가지 방법 모두를 익히시면 도움이 됩니다.
Comparable과 Comparator는 상호 보완적인 관계를 가집니다. Arrays.sort(~)를 사용할 때, 다른 정렬 기법을 사용할 때 Comparator를 쓴다고 보시면 됩니다.

[백준 11650] 좌표 정렬하기 : https://www.acmicpc.net/problem/11650


핵심 내용

1
2
3
4
5
int[] inputAry = new int[5];
Arrays.sort(inputAry);
 
ArrayList list = new ArrayList<Integer>();
Collections.sort(list);
cs
 ▷ 2 line, 5 line을 통해 오름차순으로 정렬이 가능합니다.
 ▷ 내림차순으로 정렬을 원할 때는 sort한 뒤 Collections.reverse(list);를 사용할 수 있다.

해결 방법
  1. compareTo를 오버라이딩하여 정렬한다.

 [오름차순으로 정렬]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override
public int compareTo(Point o) {
    if(this.x < o.x) {
        return -1;
    } else if(this.x == o.x) {
        if(this.y < o.y) {
            return -1;
        } else if(this.y == o.y) {
            return 0;
        } else {
            return 1;
        }
    } else {
        return 1;
    }
}
cs

[오름차순으로 정렬]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override
public int compareTo(Point o) {
    if(this.x < o.x) {
        return 1;
    } else if(this.x == o.x) {
        if(this.y < o.y) {
            return 1;
        } else if(this.y == o.y) {
            return 0;
        } else {
            return -1;
        }
    } else {
        return -1;
    }
}
cs
해결한 코드




백준 참고 내용


시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초256 MB58592926223351.122%

문제

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

입력

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

출력

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

예제 입력 1 

5
3 4
1 1
1 -1
2 2
3 3

예제 출력 1 

1 -1
1 1
2 2
3 3
3 4



댓글을 달아 주세요

  1. 익명 2021.04.29 12:47

    비밀댓글입니다