문제
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 |