문제 링크
https://www.acmicpc.net/problem/11000
11000번: 강의실 배정
첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)
www.acmicpc.net
풀이
- heapq 사용
- answer에는 각 강의실의 종료시간이 들어가 있음
- 가장 시작 시간이 빠른 강의부터 시작
1. Ti > Sj 인 경우 강의실 힙에 추가
2. 아닌 경우, 힙에서 강의실 하나 제거 후 갱신된 강의 종료 시간으로 추가
import heapq
n = int(input())
q = []
for _ in range(n):
a,b= map(int,input().split())
q.append((a,b))
# 가장 시작 시간이 빠른 거부터
q.sort()
answer = []
# 가장 시작 시간이 빠른 강의의 종료 시간 힙에 추가
# 회의 종료 시간 기준으로 최소힙 구현
heapq.heappush(answer,q[0][1])
for i in range(1,n):
if q[i][0] < answer[0]:
# 강의실 생성
heapq.heappush(answer,q[i][1])
else:
# 기존 강의실 삭제 후 종료 시간 갱신하여 다시 추가
heapq.heappop(answer)
heapq.heappush(answer,q[i][1])
# 강의실의 개수 출력
print(len(answer))
'개발 > algorithm' 카테고리의 다른 글
[백준 1065번] 한수 -python (0) | 2022.01.29 |
---|---|
[백준 1436번] 영화감독 숌 - python (0) | 2022.01.29 |
[백준 9251번] LCS -python (0) | 2022.01.27 |
[백준 12865번] 평범한 배낭 -python (0) | 2022.01.27 |
[백준 2292번] 동전1 -python (0) | 2022.01.27 |