개발/CodingTest

CodingTest - 정렬 (Comparable, compareTo, Collections.sort)

잇(IT) 2023. 12. 12. 12:04
728x90

Comparable : 해당 인터페이스는 객체의 비교를 제공하기 위해 구현된다.

compareTo() : Comparable 인터페이스의 일부로, 비교하려는 두 객체를 인자로 받아 비교 결과를 반환한다.

Collections.sort : 해당 메서드를 사용하여 리스트의 요소를 정렬할 때, 해당 요소들의 compareTo 메서드가 호출되어 정렬이 수행된다.

 

- 기본 구조

public int compareTo(Integer other) {
    return this.value - other.value;
}

 

- Example

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 o){
		if(this.x==o.x) return this.y-o.y;
		else return this.x-o.x;
	}
}

class Main {	
	public static void main(String[] args){
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		ArrayList<Point> arr=new ArrayList<>();
		for(int i=0; i<n; i++){
			int x=kb.nextInt();
			int y=kb.nextInt();
			arr.add(new Point(x, y));
		}
		Collections.sort(arr);
		for(Point o : arr) System.out.println(o.x+" "+o.y);
	}
}

 

Point 클래스는 Comparable을 구현하고 있는 클래스이며 compareTo 메서드의 파라미터로 Point 객체를 전달 받는다.

compareTo 메서드는 Point 클래스의 인스턴스인 x와 y를 가지고 1차적으로 x를 비교하고, x가 같을 경우 y를 비교하는 로직을 구현하였다.

compareTo 메서드는 기본적으로 오름차순 정렬을 지원한다.

 

1. 음수 반환 : 매개변수로 전달된 값이 기존의 값보다 큰 것을 의미하기 때문에 오름차순 정렬이 이루어진다

2. 양수 반환 : 매개변수로 전달된 값이 기존의 값보다 작은 것을 의미하기 때문에 내림차순 정렬이 이루어진다.

3. 0 반환 : 값이 같음을 의미한다. 

728x90