본문 바로가기
코딩테스트 및 알고리즘

좌표 정렬

by 영카이브 2024. 2. 6.

문제 .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 

 

정리

  1. Comparable 인터페이스를 구현한 클래스를 정의
  2. compareTo() 메서드를 오버라이드 하여 정렬의 기준을 재정의하여 구현
  3. Comparable 인터페이스를 구현한 클래스의 객체들을 포함하는 리스트(ex) ArrayList )를 생성
  4. Collections.sort() 메서드를 호출하여 리스트를 정렬하는데 compareTo() 메서드를 사용하여 정렬 기준을 적용

 

 

 

 

 

 

참고 자료 출처 :  https://www.inflearn.com/course/lecture?courseSlug=%EC%9E%90%EB%B0%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%ED%85%8C%EB%8C%80%EB%B9%84&unitId=72760&category=questionDetail&tab=community

 

 

'코딩테스트 및 알고리즘' 카테고리의 다른 글

결정 알고리즘  (0) 2024.02.16
이분 검색  (0) 2024.02.15
정렬 응용  (0) 2024.02.03
중복확인  (0) 2024.01.31
LRU 알고리즘  (0) 2024.01.30