https://www.acmicpc.net/problem/11000
문제
수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다.
김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다.
참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.)
수강신청 대충한 게 찔리면, 선생님을 도와드리자!
입력
첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000)
이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 10^9)
출력
강의실의 개수를 출력하라.
풀이
강의 시간을 시작 시간을 기준으로 오름차순 정렬한다.
백준 1931번: 회의실 배정 문제처럼 이전 강의의 끝나는 시간과 다른 강의의 시작 시간을 비교한다.
여기서는 해당 문제와 조금 다르게, 이전 강의의 끝나는 시간보다 다른 강의의 시작 시간이 앞서면 새로운 방을 배정한다. 이는 room에 새로운 요소를 넣음으로써 구현이 가능하다.
만약 이전 강의의 끝나는 시간보다 다른 강의의 시작 시간이 늦으면, 이전 강의가 끝난 뒤에 같은 방에서 해당 강의를 진행하면 된다. 이는 기존에 room에 있던 이전 강의에 대한 요소를 뺀 뒤 해당 강의에 대한 요소를 넣음으로써 구현이 가능하다.
소스 코드
import sys
import heapq
n = int(input())
time = []
for i in range(n):
s, t = sys.stdin.readline().split()
s, t = int(s), int(t)
time.append((s, t))
time.sort()
room = [time[0][1]]
for i in range(1, n):
if room[0] > time[i][0]:
heapq.heappush(room, time[i][1])
else:
heapq.heappop(room)
heapq.heappush(room, time[i][1])
print(len(room))
'알고리즘 공부 > 백준' 카테고리의 다른 글
백준 2720번: 세탁소 사장 동혁 (파이썬) (0) | 2022.01.19 |
---|---|
백준 2847번: 게임을 만든 동준이 (파이썬) (0) | 2022.01.19 |
백준 1783번: 병든 나이트 (파이썬) (0) | 2022.01.19 |
백준 1543번: 문서 검색 (파이썬) (0) | 2022.01.18 |
백준 1449번: 수리공 항승 (파이썬) (0) | 2022.01.18 |