티스토리 뷰
728x90
문제
- 점 N개가 주어짐(x, y)
- 해당 좌표들을 x 좌표가 증가하는 순으로 정렬
- x 좌표가 같으면 y 좌표가 증가하는 순서로 정렬
해결방법
Point class를 만들어서 좌표를 Point 배열로 저장하였다. 해당 좌표들을 정렬하기 위해 Comparator를 만들었고, 주어진 조건대로 x 좌표가 증가하는 순으로 정렬하였다. x 좌표가 같다면 y 좌표가 증가하는 순서로 정렬할 수 있도록 조건을 주었다.
객체 정렬과 관련된 내용은 아래 글을 참고하면 좋을 것 같다.
코드
import java.io.*;
import java.util.*;
// 좌표 class
class Point{
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public class Main{
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Point[] points = new Point[N]; // 좌표들을 저장할 배열
for(int i=0; i<N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
points[i] = new Point(x, y); // 좌표 입력 받아 저장
}
// 좌표를 정렬할 comparator
Comparator<Point> comparator = new Comparator<Point>() {
@Override
public int compare(Point o1, Point o2) {
// x 좌표가 같지 않다면 x 좌표가 증가하는 순으로 정렬
if(o1.x != o2.x){
return o1.x - o2.x;
}
// x 좌표가 같다면 y 좌표가 증가하는 순으로 정렬
else{
return o1.y - o2.y;
}
}
};
// comparator를 활용하여 배열 정렬
Arrays.sort(points, comparator);
// 정렬된 결과 출력
for(int i = 0; i<N; i++){
System.out.println(points[i].x + " " + points[i].y);
}
}
}
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2138번 전구와 스위치(JAVA) (4) | 2022.12.22 |
---|---|
[백준] 1697번 숨바꼭질(JAVA) (0) | 2022.12.21 |
[백준] 9095번 1, 2, 3 더하기(JAVA) (0) | 2022.12.19 |
[백준] 1497번 기타콘서트(JAVA) (0) | 2022.12.19 |
[백준] 10866번 덱(JAVA) (0) | 2022.07.28 |
댓글