1. 문제
좌표 (x, y)가 주어지면 모든 좌표를 오름차순으로 정렬하는 프로그램을 작성하세요.
x값이 같으면 y값에 의해 정렬한다.
2 - 1. 나의 풀이
그냥 for문으로 계속 비교해서 풀었다.
강의의 취지를 따르자
3 - 1. 강의 풀이
Comparable을 사용해서 정렬했다.
Comparable과 Comparator 는 수가 아닌 사용자 지정의 기준을 정해서 정렬하게 만들어주는 방법인데, 이를 사용할 생각을 못했다.
Comparable은 compareTo<T>를 OverRide
Comparator는 익명객체를 사용해 compare(T1, T2)를 OverRide한다.
리턴값이 양수이면 교환하고 음수이면 교환하지 않는다.
만약
T1 | T2 |
10 | 20 |
이 상태에서 오름차순 정렬을 하고자 한다면
compareTo는 return this.x - T.x 를 반환
compare는 return T1.x - T2.x를 반환하면된다.
(T1과 T2를 오름차순 정렬하고자 한다면 교환하지 않아야 한다 ㅡ> 음수가 나와야 하므로 T1 - T2를 하는 것.)
3 - 2. 강의 코드
강의에서는 Comparable을 사용해서 풀었고 나는 Comparator까지 사용했다.
package Sort;
import java.util.*;
class Point implements Comparable<Point> {
public int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
//양수 반환시 교환., 음수 반환시 교환하지 않는다.
public int compareTo(Point point) {
if(this.x == point.x) return this.y - point.y;
else return this.x - point.x;
}
}
public class Sort_07_solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Point> arr = new ArrayList<Point>();
for (int i = 0; i < n; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
arr.add(new Point(x, y));
}
Collections.sort(arr);
for (Point p : arr) {
System.out.println(p.x + " " +p.y);
} System.out.println();
}
}
Comparator 사용
package Sort;
import java.util.*;
class Point1{
public int x, y;
Point1(int x, int y) {
this.x = x;
this.y = y;
}
}
public class Sort_07_Comparator {
static Comparator<Point1> comp = new Comparator<Point1>() {
@Override
public int compare(Point1 o1, Point1 o2) {
if(o1.x == o2.x) return o1.y - o2.y;
else return o1.x - o2.x;
}
};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Point1> arr = new ArrayList<Point1>();
for (int i = 0; i < n; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
arr.add(new Point1(x, y));
}
Collections.sort(arr, comp);
for (Point1 p : arr) {
System.out.print(p.x + " " + p.y +"\n");
}
}
}
4. 얻어갈 점
전에 네이버 블로그에 Comparable과 Comparator 정리해둔 글이 있었는데 그걸 티스토리에 다시 옮겨놓고 복습해야겠다.
'자바 알고리즘 문제풀이 > Sorting and Searching(정렬, 이분검색, 결정알고리즘' 카테고리의 다른 글
9. 뮤직비디오 (결정 알고리즘) (1) | 2023.11.03 |
---|---|
8. 이분 검색 (1) | 2023.11.02 |
6. 장난꾸러기 (1) | 2023.10.28 |
5. 중복 확인 (1) | 2023.10.25 |
4. ★★ Least Recently Used (LRU) (0) | 2023.10.25 |