[伯俊]1000:教室の手配


優先キュー


教室を手配する

授業が終わったら、次の授業を始めることができます.
->
授業がまだ終わっていないのに次の授業が始まるとしたら、教室がもう一つ必要です.
つまり、この問題の鍵は、現在の授業が終わる時間と次の授業が始まる時間にある.
次の授業の開始時間が現在の授業より速い場合は、より多くの教室を使用できます.
遅刻したり等しければ、今授業中の教室を使ってもいいです.(置換)
ですから、今の状況では、最初に終わった教室を一番前にして、次の授業の終了時間をお尻に置けばいいのです.詳細については、「コード」を参照してください.
import sys
import heapq
input = sys.stdin.readline
n = int(input())
lst = []
for i in range(n):
	start, end = map(int, input().split())
	lst.append((start, end))
 # 시작 시간이 빠른 순서대로 정렬 (맨 처음 시작하는 강의의 종료 시간이 중요하기 때문이다)
lst.sort(key=lambda x:x[0])
answer = []
# 맨 처음 강의의 종료 시간을 추가
answer.append(lst[0][1])
for i in range(1, n):
	# 현재 강의의 종료 시간이 다음 강의의 시작 시간 보다 느리면 강의실 추가
	if answer[0] > lst[i][0]:
		heapq.heappush(answer, lst[i][1])
	else:
    		# 현재 강의의 종료 시간이 다음 강의의 시작 시간과 같거나 빠르면 현재 강의수업이 끝나고 , 현재 강의실 쓰면 됨 
		heapq.heappop(answer)
		heapq.heappush(answer, lst[i][1])
# 강의실 개수 출력
print(len(answer))