이번 문제는 heapq와 그리디 알고리즘을 활용하여 해결하였다. 강의의 번호와 시작 시간, 종료 시간을 입력 받으면, heapq에 (시작 시간, 종료시간, 강의 번호) 형식으로 삽입하여 강의 시작 순으로 정렬되도록 한다. 그리고 heapq를 순회한다. 강의실 리스트에는 이전 강의들의 종료 시간을 넣어 현재 강의가 들어갈 수 있는 강의실이 있는지 시작 시간과 전 강의의 종료 시간을 비교하여 결정한다. 만약 조건이 성립한다면 그 강의실의 값을 현재 강의의 종료 시간으로 갱신해주고, 그렇지 않다면 새로운 강의실을 추가하여 현재 종료 시간을 넣어주도록 하였다. 이렇게 되면 강의실 리스트에 대한 pop이 이뤄지지 않았기 때문에 총 몇개의 강의실이 필요한지 알 수 있다.
import heapq
n = int(input())
lectures = []
for _ in range(n):
a, b, c = map(int, input().split())
heapq.heappush(lectures, (b, c, a))
rooms = []
while lectures:
s, e, num = heapq.heappop(lectures)
if not rooms:
heapq.heappush(rooms, e)
else:
chk = False
for i in range(len(rooms)):
if rooms[i] <= s:
rooms[i] = e
chk = True
break
if not chk:
heapq.heappush(rooms, e)
print(len(rooms))