우선순위 큐
, 정렬우선순위 큐는 일반적인 FIFO가 아닌 큐에서 우선순위가 높은 요소들이 먼저 뽑혀 나온다. 이런 특성을 이용하면 최소 강의실 수를 구할 수 있다.
먼저 시작하는 강의 순서로 정렬되어 있어야 하므로 2차원 배열로 받은 강의실의 값을, 강의가 시작하는 시간이 빠른 순서로 오름차순 정렬한다. (먼저 시작하는 강의가 강의실을 선점하므로
)
이후 우선순위 큐(pq)에 처음으로 시작하는 강의의 끝나는 시간을 넣고, 강의를 순차적으로 탐색하며 강의실의 수를 구한다.
1. `다음 수업의 시작시간` ≥ `가장빨리 끝나는 현재 수업의 끝나는 시간`
- 연달아 사용할 수 있으므로 pq.poll()을 하고, 다음 수업의 끝나는 시간을 큐에 담는다.
2. `다음 수업의 시작시간` < `가장 빨리 끝나는 현재 수업의 끝나는 시간`
- 현재 수업이 끝나기전까지 사용할 수 없으므로 강의실을 하나 더 두어야 한다.
따라서 pq에 다음 수업의 끝나는 시간을 담기만한다.
위 과정을 n-1번만큼 반복하면, 큐에 남는 데이터들의 수가 필요한 강의실의 수가 된다.