728x90
반응형
https://www.acmicpc.net/problem/1374
문제
N개의 강의가 있다. 우리는 모든 강의의 시작하는 시간과 끝나는 시간을 알고 있다. 이때, 우리는 최대한 적은 수의 강의실을 사용하여 모든 강의가 이루어지게 하고 싶다.
물론, 한 강의실에서는 동시에 2개 이상의 강의를 진행할 수 없고, 한 강의의 종료시간과 다른 강의의 시작시간이 겹치는 것은 상관없다. 필요한 최소 강의실의 수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의 번호는 1부터 N까지 붙어 있으며, 입력에서 꼭 순서대로 주어지지 않을 수 있으나 한 번씩만 주어진다. 강의 시작 시간과 강의 종료 시간은 0 이상 10억 이하의 정수이고, 시작 시간은 종료 시간보다 작다.
출력
첫째 줄에 필요한 최소 강의실 개수를 출력한다.
풀이
Code
import sys
from heapq import heappush, heappushpop
input = sys.stdin.readline
n = int(input())
# 1. 강의 정보 리스트 생성 후 정렬
class_information = sorted([list(map(int, input().split())) for _ in range(n)], key = lambda x : [x[1], x[2]])
# 2. 힙 리스트 생성
heap = []
# 3.
for _, start, end in class_information :
# 3-1. 힙이 비었거나 힙의 최솟값이 현재 강의 시작 시간보다 클 경우
if not heap or heap[0] > start : heappush(heap, end)
# 3-2. 이외의 경우
else : heappushpop(heap, end)
# 4. 결과 출력
print(len(heap))
728x90
반응형
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python/BOJ] 16987. 계란으로 계란치기 (0) | 2024.05.30 |
---|---|
[Python/BOJ] 2293. 동전 1 (0) | 2024.05.30 |
[Python/BOJ] 1263. 시간 관리 (0) | 2024.05.27 |
[Python/BOJ]1240. 노드사이의 거리 (0) | 2024.05.27 |
[Python/BOJ] 1038. 감소하는 수 (0) | 2024.05.27 |