[BOJ-11000] 강의실 배정

ParkJunHa·2023년 9월 16일

BOJ

목록 보기
38/85

[Gold V] 강의실 배정 - 11000

문제 링크

성능 요약

메모리: 73584 KB, 시간: 400 ms

분류

자료 구조, 그리디 알고리즘, 우선순위 큐, 정렬

문제 설명

수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다.

김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다.

참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.)

수강신청 대충한 게 찔리면, 선생님을 도와드리자!

입력

첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000)

이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)

출력

강의실의 개수를 출력하라.

풀이

아이디어

회의실 예약? 암튼 그런 문제랑 비슷하게 끝나는 시간대로 정렬한 뒤 세는 문제인줄 알았다.
문제 이해를 잘 못해서 이상한 방법으로 풀었는데, 겹쳐도 상관없다! 강의실을 여러개 빌리면 되니까..

강의 시간이 끝나고나서 들어오는 수업은 그대로 강의실을 사용하면 되지만 만약 그렇지 않다면 새로운 강의실을 빌려야 한다.

이 과정에서 시간 문제 때문에 우선순위 큐를 사용하게 된다. 이 자료구조를 써먹어 본 경험이 적어서 애를 먹었고, 문제를 이해 못해서 애를 먹었던 문제

코드

import heapq
import sys
input = sys.stdin.readline

n = int(input())
timeline = list(list(map(int, input().split())) for _ in range(n))
timeline.sort()

pq = []
heapq.heappush(pq, timeline[0][1])

for i in range(1, n):
    if timeline[i][0] < pq[0]:
        heapq.heappush(pq, timeline[i][1])
    
    else:
        heapq.heappop(pq)
        heapq.heappush(pq, timeline[i][1])

print(len(pq))

회고

그리디 연습이 적었고, 자료구조 연습이 적었다. 아이디어 도출도 어려웠다. 이번에 공부하는 최단거리 끝나면 그리디를 DP처럼 한번 파보자.

profile
PS린이

0개의 댓글