Programming/백준
백준 19598 - 최소 회의실 개수 (파이썬)
pental
2025. 3. 6. 20:36
https://www.acmicpc.net/problem/19598
풀이
N = int(input())
courses = []
for _ in range(N):
start, end = map(int, input().split())
courses.append((start, end))
courses.sort()
- N개의 회의 일정이 주어지므로, (시작 시간, 종료 시간) 튜플을 리스트 courses에 저장
- 시작 시간을 기준으로 정렬하여, 빠른 시간에 시작하는 회의를 먼저 처리
from queue import PriorityQueue
pq = PriorityQueue()
pq.put(courses[0][1]) # 첫 번째 회의의 종료 시간을 큐에 삽입
count = 1 # 필요한 회의실 개수
- 최소 힙(우선순위 큐)을 사용하여 현재 사용 중인 회의실의 종료 시간을 관리
- 첫 번째 회의의 종료 시간을 삽입하고, 회의실 개수를 1로 설정
for i in range(1, N) :
earliest = pq.get()
if earliest <= courses[i][0] :
pq.put(courses[i][1])
else :
count += 1
pq.put(courses[i][1])
pq.put(earliest)
- 현재 가장 빨리 끝나는 회의의 종료 시간(earliest)을 확인
- 만약 earliest ≤ 현재 회의의 시작 시간이라면, 기존 회의실을 사용할 수 있으므로 종료 시간만 갱신
- 그렇지 않다면, 기존 회의실을 사용할 수 없으므로 새로운 회의실이 필요하며 count를 증가
- 기존 종료 시간(earliest)도 다시 큐에 넣어서, 유지
코드
# 백준 19598 - 최소 회의실 개수
# 분류 : 그리디 알고리즘
from queue import PriorityQueue
N = int(input())
courses = []
for _ in range(N) :
start, end = map(int, input().split())
courses.append((start, end))
courses.sort()
pq = PriorityQueue()
pq.put(courses[0][1])
count = 1
for i in range(1, N) :
earliest = pq.get()
if earliest <= courses[i][0] :
pq.put(courses[i][1])
else :
count += 1
pq.put(courses[i][1])
pq.put(earliest)
print(count)