코딩테스트

[그리디] 백준 11000 Gold5 강의실 배정

영최 2024. 1. 5. 15:55
728x90

📌 링크 : https://www.acmicpc.net/problem/11000

 

11000번: 강의실 배정

첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)

www.acmicpc.net

❗️ Issue 

1️⃣ 문제 이해를 잘 못했다 최고로 긴 회의 수를 만드는 걸로 착각했는데 

그게 아니라 강의실을 몇 개 구해야 하는가의 문제였다.

문제 파악을 위해 예시를 잘 읽고 올바른 로직으로 답을 도출했는지 확인하자

 

💡 Solution 

1️⃣ 불연속적: 현재 회의 시작 시간 < 가장 먼저 끝나는 회의의 시간  => 강의실 추가

2️⃣ 연속적: 현재 회의 시작 시간 > 가장 먼저 끝나는 회의의 시간 => 강의실 개수 유지 및 끝나는 시간 변경

 

이를 위해서 sort() 및 우선순위 큐가 필요하다

전체 코드

import heapq
n = int(input())
q = []
for i in range(n):
    s, e = map(int, input().split())
    q.append([s, e])

q.sort()

room = []
heapq.heappush(room, q[0][1])

for i in range(1, n):
    if q[i][0] < room[0]:
        heapq.heappush(room, q[i][1])
    else:
        heapq.heappop(room)
        heapq.heappush(room, q[i][1])
print(len(room))
728x90