
강의 시작 시간, 종료 시간을 2차원 배열에 저장합니다.
PriorityQueue는 기본 내림차순 정렬이고, Comparator을 이용해서 오름차순 정렬을 합니다.
람다식을 이용하여 정렬을 할 수도 있습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bufferedReader.readLine());
int[][] time = new int[N][2];
int count = 0;
for (int i = 0; i < N; i++) {
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
time[i][0] = Integer.parseInt(stringTokenizer.nextToken()); // 시작 시간
time[i][1] = Integer.parseInt(stringTokenizer.nextToken()); // 종료 시간
}
/*
오름차순 정렬
Comparator 인터페이스 사용
또는 람다식 Arrays.sort(time, (a, b) -> a[0] - b[0]);
*/
Arrays.sort(time, new Comparator<int[]>() {
@Override
public int compare(int[] a, int[] b) {
return a[0] - b[0];
}
});
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
for (int[] t : time) {
while (!priorityQueue.isEmpty() && priorityQueue.peek() <= t[0]) {
priorityQueue.poll();
}
priorityQueue.offer(t[1]);
count = Math.max(count, priorityQueue.size());
}
System.out.println(count);
}
}
Ti ≤ Sj 일 경우 priorityQueue.poll()을 이용해서 큐에서 제거합니다.
while (!priorityQueue.isEmpty() && priorityQueue.peek() <= t[0]) {
priorityQueue.poll();
}
priorityQueue.offer(t)를 통해 현재 진행되는 강의의 종료 시간을 저장합니다. 예를 들어 (1, 3)은 3이 저장됩니다.
priorityQueue.offer(t[1]);
priorityQueue.size()를 통해 강의실의 수를 구할 수 있습니다.
count = Math.max(count, priorityQueue.size());
.
.
.
문제는 아래에서 확인할 수 있습니다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준_JAVA_알고리즘] 1920 수 찾기 #해시 (1) | 2024.12.27 |
---|---|
[백준_JAVA_알고리즘] 1302 베스트셀러 #해시 (2) | 2024.12.27 |
[백준_JAVA_알고리즘] 1715 카드 정렬하기 #힙 #우선순위 큐 (0) | 2024.12.23 |
[백준_JAVA_알고리즘] 11279 최대 힙 #힙 #우선순위 큐 (0) | 2024.12.19 |
[백준_JAVA_알고리즘] 11286 절댓값 힙 #힙 #우선순위 큐 (1) | 2024.12.15 |