해당 문제는 하나의 회의실에서 할 수 있는 가장 많은 회의의 수를 찾는 것이다.
회의가 끝나는 시각이 이른 회의부터 채워나가면 가장 많은 회의를 할 수 있다.
회의가 끝나는 시각
을 기준으로 정렬한다.
회의가 시작하는 시각
이 현재 시각
보다 이르거나 같다면,
회의가 끝나는 시각
을 기준으로 현재 시각
을 갱신한다.
이를 반복한다.
long currentTime = 0;
int result = 0;
for (int i=0; i<n; i++) {
long start = arr[i][0];
long end = arr[i][1];
if (start >= currentTime) {
currentTime = end;
result++;
}
}
끝나는 시각이 같다면, 시작 시각이 빠른 회의가 우선순위가 높다.
해당 조건 없이 끝나는 시각으로만 정렬을 하면,
아래 케이스를 통과하지 못 하게 된다.
2
5 5
1 5
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
long[][] arr = new long[n][2];
for (int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
arr[i][0] = Long.parseLong(st.nextToken()); // start
arr[i][1] = Long.parseLong(st.nextToken()); // end
}
Arrays.sort(arr, (o1, o2) -> {
if (o1[1] == o2[1]) {
return Long.compare(o1[0], o2[0]);
}
return Long.compare(o1[1], o2[1]);
});
long currentTime = 0;
int result = 0;
for (int i=0; i<n; i++) {
long start = arr[i][0];
long end = arr[i][1];
if (start >= currentTime) {
currentTime = end;
result++;
}
}
System.out.println(result);
}
}