티스토리 뷰
728x90
문제
- 점 N개가 주어짐(x, y)
- 해당 좌표들을 y 좌표가 증가하는 순으로 정렬
- y 좌표가 같으면 x 좌표가 증가하는 순서로 정렬
해결방법
Point class를 만들어서 좌표를 Point 배열로 저장하였다. 해당 좌표들을 정렬하기 위해 Comparator를 만들었고, 주어진 조건대로 x 좌표가 증가하는 순으로 정렬하였다. x 좌표가 같다면 y 좌표가 증가하는 순서로 정렬할 수 있도록 조건을 주었다.
이전에 풀었던 11650번 좌표 정렬하기 문제와 똑같이 해결하였다.
코드
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());
List<Point> points = new ArrayList<>(); // 좌표들을 저장할 리스트
for(int i = 0; i<N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
// 좌표 입력 받아 저장
points.add(new Point(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
}
// 좌표 입력 받아 저장
Comparator<Point> comparator = new Comparator<Point>() {
@Override
public int compare(Point o1, Point o2) {
// y 좌표가 같지 않다면 y 좌표가 증가하는 순으로 정렬
if(o1.y != o2.y){
return o1.y - o2.y;
}
// y 좌표가 같다면 x 좌표가 증가하는 순으로 정렬
else {
return o1.x - o2.x;
}
}
};
// comparator를 활용하여 배열 정렬
Collections.sort(points, comparator);
// 정렬된 결과 출력
for(int i = 0; i<N; i++){
System.out.println(points.get(i).x + " " + points.get(i).y);
}
}
}
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 18429번 근손실 (JAVA) (0) | 2023.01.15 |
---|---|
[백준] 2310번 어드벤처 게임 (JAVA) (0) | 2023.01.14 |
[백준] 2138번 전구와 스위치(JAVA) (4) | 2022.12.22 |
[백준] 1697번 숨바꼭질(JAVA) (0) | 2022.12.21 |
[백준] 11650번 좌표 정렬하기(JAVA) (0) | 2022.12.20 |
댓글