[백준 19589] 최소 회의실 개수

Junyoung Park·2022년 2월 28일
0

코딩테스트

목록 보기
129/631
post-thumbnail

1. 문제 설명

최소 회의실 개수

2. 문제 분석

힙을 통해 가장 회의가 빨리 끝나는 시간을 확인해, 시작 시간이 빠른 회의 순서대로 더 기다릴 수 있다면(즉 이 회의의 시작 시간이 진행 중인 회의 종료 시간보다 느리다면) 회의실을 추가할 필요가 없다. 만일 더 빠르다면(즉 진행 중인 회의를 기다릴 수가 없다면) 회의실을 추가해야 한다.

  • 회의실을 늘리는 기준은 힙의 가장 빠른 회의 종료인 반면, 회의실을 넣는 시점은 시작 시간이 빠른 순서임을 주의하자.

3. 나의 풀이

import heapq
import sys

n = int(sys.stdin.readline().rstrip())
conferences = []
for _ in range(n):
    start, end = map(int, sys.stdin.readline().rstrip().split())
    conferences.append([start, end])

conferences.sort()
# 빨리 시작하는 회의부터 확인
rooms = []
heapq.heappush(rooms, conferences.pop(0)[1])
total = 1
# 가장 처음 시작하는 회의에 회의실 하나를 할당한다. 판단 기준은 이 회의가 마무리되는 시간.

for conference in conferences:
    if rooms[0] > conference[0]:
        # 지금 진행 중인 회의 중 가장 빨리 끝나는 회의보다 빨리 시작해야 한다면
        total += 1
        heapq.heappush(rooms, conference[1])
        # 새로운 방을 할당해야 주어야 한다.
    else:
        heapq.heappop(rooms)
        heapq.heappush(rooms, conference[1])
        # 지금 진행 중인 회의가 끝난 뒤 시작한다면 방을 할당할 필요가 없다.

print(total)


profile
JUST DO IT

0개의 댓글