문제 .N개의 평면상의 좌표(x, y)가 주어지면 모든 좌표를 오름차순으로 정렬하는 프로그램을 작성하세요.
입력 예시
5
2 7
1 3
1 2
2 5
3 6
답 :
1 2
1 3
2 5
2 7
3 6
나의 답변
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) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Point> list = new ArrayList<>();
for( int i=0; i<n; i++ ) {
int x=sc.nextInt();
int y=sc.nextInt();
list.add(new Point(x,y));
}
Collections.sort(list);
for( Point p : list ) {
System.out.println(p.x + " " + p.y);
}
}
}
인터페이스 Comparable이란?
객체의 순서를 지정하는 인터페이스이다.
Java에서 sort메서드는 배열이나 리스트의 요소들을 정렬하는데 사용하며 이 때, 졍렬의 기준이 되는 객체들은 Comparable 인터페이스를 구현해야한다.
ComparableTo() 메서드란?
Comparable인터페이스를 사용한다면 ComparableTo()를 오버라이드하여 반드시 재정의해야한다.
int compareTo(T o)
T는 비교할 객체의 타입 / o는 비교 대상 객체
리턴값이
- 음수 : 현재 객체가 비교 대상 객체보다 작다.
- 0 : 현재 객체가 비교 대상 객체보다 같다.
- 양수 : 현재 객체가 비교 대상 객체보다 크다.
Arrays.sort()와 Collections.sort()의 차이
- Arrays.sort() / 배열 정렬 / 퀵 정렬( 배열의 길이가 작을 땐 삽입 정렬 )
- byte[]
- char[]
- double[]
- int[]
- Object[]
- Collections.sort() / List Collection 정렬 / TimSort 알고리즘 ( 퀵 정렬 + 삽입 정렬 : 가장 효율적 )
- ArrayList
- LinkedList
- Vector
정리
- Comparable 인터페이스를 구현한 클래스를 정의
- compareTo() 메서드를 오버라이드 하여 정렬의 기준을 재정의하여 구현
- Comparable 인터페이스를 구현한 클래스의 객체들을 포함하는 리스트(ex) ArrayList )를 생성
- Collections.sort() 메서드를 호출하여 리스트를 정렬하는데 compareTo() 메서드를 사용하여 정렬 기준을 적용