[백준] 1374 강의실 (그리디, heapq)

김영민·2024년 9월 4일
0

코딩테스트

목록 보기
25/32


코드

import sys
import heapq
input = sys.stdin.readline

N = int(input())
lecture = [list(map(int, input().split())) for _ in range(N)]
lecture.sort(key=lambda x: x[1])

room = []
cnt = 0
for lec in lecture:
    while room and room[0] <= lec[1]: # 가장 일찍 끝나는 시간보다 시작 시간이 크면
        heapq.heappop(room)       # room에서 가장 작은 원소 pop & return
    heapq.heappush(room, lec[2])    # room에 i[2]=끝나는 시간을 추가

    cnt = max(cnt, len(room))
print(cnt)

풀이

  • heapq를 활용하는 문제이다.
  • 시작하는 시간을 기준으로 sort한다.
  • 끝나는 시간을 기준으로 room을 배정한다고 생각하자.
  • 만약 가장 빨리 끝나는 강의 (heapq 첫번째 값)보다 다음 강의의 시작하는 시간이 크다면 -> 강의를 갈아끼우면 된다.
  • 필요한 강의실의 max 값을 구하면 최소 필요한 강의실을 구할 수 있다.

0개의 댓글