[伯俊]1000:教室の手配
1130 ワード
優先キュー
教室を手配する
授業が終わったら、次の授業を始めることができます.
->
授業がまだ終わっていないのに次の授業が始まるとしたら、教室がもう一つ必要です.
つまり、この問題の鍵は、現在の授業が終わる時間と次の授業が始まる時間にある.
次の授業の開始時間が現在の授業より速い場合は、より多くの教室を使用できます.
遅刻したり等しければ、今授業中の教室を使ってもいいです.(置換)
ですから、今の状況では、最初に終わった教室を一番前にして、次の授業の終了時間をお尻に置けばいいのです.詳細については、「コード」を参照してください.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))
Reference
この問題について([伯俊]1000:教室の手配), 我々は、より多くの情報をここで見つけました
https://velog.io/@jinii/백준-11000강의실-배정
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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))
Reference
この問題について([伯俊]1000:教室の手配), 我々は、より多くの情報をここで見つけました https://velog.io/@jinii/백준-11000강의실-배정テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol