728x90
설명
풀이
자료구조는 ArrayList<Point>를 사용한다.
Point 클래스는 우리가 정의해야 할 클래스이다. 이 클래스는 x좌표, y좌표를 갖고 있으며 Comparable 인터페이스의 구현 클래스이다. Comparable 인터페이스에서 구현해야 할 메소드는 compareTo이다.
오름차순인 경우 this.멤버변수 - o.멤버변수, 내림차순인 경우 o.멤버변수 - this.멤버변수 를 사용한다. 즉, 음수값이 리턴되도록 하면 된다.
정렬은 Collections.sort를 호출하면 된다. 그럼 Comparable 인터페이스를 통해 compareTo의 정렬 기준에 의해 정렬이 수행된다.
코드와 함께 설명을 정리하면 다음과 같다.
아래는 핵심인 Point 클래스이다.
1) Point 클래스는 Comparable 인터페이스의 구현 클래스이다. Comparable<Point>는 Point 클래스를 정렬하겠다는 뜻이다.
2) Point 클래스는 x 좌표, y 좌표를 멤버 변수로 갖는 클래스이다.
3) ArrayList에 데이터를 넣을 때 Point 객체를 넣어야 하고, 이 객체는 x, y 좌표를 갖고 있으므로 x, y 좌표를 매개변수로 받아 Point 객체를 생성하기 위해 생성자를 작성한다.
4) 정렬 기준을 작성하는 클래스인 compareTo 클래스이다.
class Point implements Comparable<Point> { // 1)
// 2)
int x;
int y;
// 3)
public Point(int x, int y) {
this.x = x;
this.y = y;
}
// 4)
@Override
public int compareTo(Point o) {
if (this.x == o.x) return this.y - o.y;
else return this.x - o.x;
}
}
정렬 호출은 다음과 같이 한다.
Collections.sort(arr);
코드
package inflearn._6_7.main;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
class Point implements Comparable<Point>{
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int compareTo(Point o) {
if (this.x == o.x) return this.y - o.y;
else return this.x - o.x;
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
ArrayList<Point> arrayList = new ArrayList<>();
StringTokenizer st;
for(int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
arrayList.add(new Point(x,y));
}
Collections.sort(arrayList);
for(Point p : arrayList) {
sb.append(p.x).append(" ").append(p.y).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
'Coding Test Inflearn' 카테고리의 다른 글
[결정 알고리즘] 뮤직비디오 (0) | 2024.05.10 |
---|---|
[이분 검색(Binary Search)] 이분 검색 (0) | 2024.05.10 |
[정렬] 장난꾸리기 (0) | 2024.05.09 |
[정렬] 중복 확인 (0) | 2024.05.09 |
[정렬] Least Recently Used (0) | 2024.05.08 |