Algorithms
[BOJ] 백준 1931. 회의실 배정 Java , Comparator 사용
devran
2023. 7. 19. 16:14
반응형
https://www.acmicpc.net/problem/1931
난이도 - 실버1
풀이
최대 사용할 수 있는 회의의 최대 개수를 위해서는 시간이 겹치지 않는 선에서 이를 수행해야 하고, 그렇다면 끝나는 시간이 같으면 시작 시간이 늦고(회의 시간이 짧음), 끝나는 시간이 다르다면 더 빨리 끝나는 시간의 회의를 수행해야 한다.
코드
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
static int N;
static int [][] arr;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
int[][] arr = new int [2][N+1];
// 1번부터 N번까지
// 0은 시작시간, 1은 끝나는시간!
for (int i = 1; i < N+1; i++) {
arr[0][i] = sc.nextInt();
arr[1][i] = sc.nextInt();
}
//Comparator 사용하여 2차원배열 정렬하기
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if( o1[1] == o2[1]) { // 끝나는 시간이 같다면 시작시간을 오름차순 정렬
return o1[0] - o2[0];
}
return o1[1] - o2[1]; //끝나는 시간이 다르다면 끝나는 시간을 기준으로 오름차순 정렬
}
});
int count = 0;
int end = -1;
for(int i = 1; i < N +1; i++) {
if (arr[0][i] >= end) { // 끝나는 시간보다 시작 시간이 같거나 크면
end = arr[1][i]; // 끝나는 시간 지정
count ++; // 카운트
}
}
System.out.println(count);
}
}
Comparator 보통 언제 쓰나?
Comparator는 Java에서 제공하는 인터페이스로, 두 개의 객체를 비교하는 데 사용되고, 주로 정렬이나 순서 지정과 관련된 작업에서 활용되니 코테 단골로 알아두자.
🦾 지피티가 정리해준 사항들
- 기본 정렬 기준 외에 사용자 정의 정렬 기준 필요: Java에서는 기본적으로 객체의 natural order(자연적인 순서)에 따라 정렬이 이루어집니다. 그러나 때로는 특정한 기준에 따라 정렬해야 할 필요가 있을 수 있습니다. 이때 Comparator를 사용하여 원하는 비교 기준을 정의할 수 있습니다.
- 객체의 속성을 기준으로 정렬: 객체의 특정 속성에 기반하여 정렬하고 싶을 때 Comparator를 활용할 수 있습니다. 예를 들어, 이름이나 나이, 가격 등의 속성을 기준으로 정렬하고자 할 때 Comparator를 사용하여 비교 로직을 작성할 수 있습니다.
- 정렬 방식 변경: 기본적으로 오름차순으로 정렬되는데, Comparator를 사용하면 내림차순 등 다른 정렬 방식을 선택할 수 있습니다. Comparator를 통해 정렬 방식을 변경할 수 있기 때문에 다양한 정렬 요구사항을 처리할 수 있습니다.
- 다중 정렬 기준 적용: Comparator를 사용하면 여러 개의 정렬 기준을 적용할 수 있습니다. 예를 들어**, 먼저 나이로 정렬한 후, 나이가 같은 경우에는 이름으로 정렬하는 등의 다중 정렬 기준**을 적용할 수 있습니다.
Comparator를 사용하는 상황은 주로 다음과 같습니다.
- 사용자 정의 객체를 정렬해야 할 때
- 객체의 특정 속성을 기준으로 정렬해야 할 때
- 정렬 방식을 변경하고자 할 때
- 다중 정렬 기준이 필요한 경우
반응형