좌표 정렬 잘 기억해두자 this - o <- 오름차순 o - this <- 내림차순
한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들려고 한다.
각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라.
단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다.
회의 횟수의 최대값 구하기
1. 끝나는 시간 기준으로 오름차순 정렬
2. 끝나는 시간이 같으면 시작 시간 오름차순 정렬
이렇게 하면 빨리 끝나는 회의를 찾고, 그 회의가 끝나면 바로 이어서 할 수 있는 회의를 하는 최적의 경우가 된다
입력
5
1 4
2 3
3 5
4 6
5 7
출력
3
입력
3
3 3
1 3
2 3
출력
2
import java.util.*;
class point implements Comparable<point>{
int start;
int end;
point(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public int compareTo(point o) {
if (this.end == o.end) return this.start - o.start;
else return this.end - o.end;
}
}
class Main{
static ArrayList<point> arr;
static int res = 0, fin = Integer.MIN_VALUE;
public void Solution(ArrayList<point> arr){
for (point x : arr){
if (x.start >= fin) {
res++;
fin = x.end;
}
}
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
arr = new ArrayList<>();
for (int i = 0; i < n; i++) arr.add(new point(in.nextInt(), in.nextInt()));
Collections.sort(arr);
T.Solution(arr);
System.out.println(res);
}
}
'알고리즘 이전 > 그리디' 카테고리의 다른 글
친구인가(Disjoint-set: 유니온-파인드) (0) | 2023.09.06 |
---|---|
다익스트라자 알고리즘 (0) | 2023.09.05 |
최대 수입 스케쥴(우선순위 큐) (0) | 2023.09.04 |
결혼식 (0) | 2023.09.04 |
씨름 선수 (0) | 2023.09.04 |