게으른 개발자

BOJ :: [1374] 강의실 - Python 본문

알고리즘

BOJ :: [1374] 강의실 - Python

이쓴 2021. 10. 7. 23:53

문제

https://www.acmicpc.net/problem/1374

 

1374번: 강의실

첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의

www.acmicpc.net

 

문제 설명

강의실 문제는 N개의 강의 인덱스(idx), 강의 시작시간(s), 강의 종료시간(e)이 차례로 주어진다. 이때 주어진 강의를 모두 열고자 할 때 필요한 최소 강의실 수를 구한다.

 

풀이

두개의 heapq를 사용하여 풀이했다. 먼저 강의 정보를 입력받으면서 heapq를 사용하여 강의 시작시간을 기준으로 오름차순 정렬한다. 그리고 강의 시작시간이 빠른 순서대로 강의실을 배정한다. 배정된 강의는 table 리스트에 저장하며, heapq를 사용하여 강의 종료시간을 기준으로 오름차순으로 정렬하며 현재 배정된 강의실 중 강의가 가장 빨리 끝나는 강의의 종료시간강의실을 배정할 강의의 시작시간을 비교하여 배정할 강의의 시작시간이 종료시간보다 크거나 같다면 해당 강의실을 이용할 수 있기 때문에 table에 추가하고, 종료된 강의는 table에서 제거한다. 만약 배정할 강의의 시작시간이 종료시간보다 작다면 추가로 강의실을 배정해야 하기 때문에 배정할 강의를 table리스트에 추가한다. n개의 강의만큼 반복하면 table리스트의 길이는 강의에 필요한 최소 강의실 수가 된다.

 

코드

import sys
import heapq

input = sys.stdin.readline

pq = []

n = int(input())
table = []

for i in range(n):
    idx, s, e = map(int, input().split())

    heapq.heappush(pq, (s, e, idx))

for i in range(n):
    s, e, idx = heapq.heappop(pq)

    if len(table) == 0:
        heapq.heappush(table, (e, s, idx))
        continue
    
    te, ts, tidx = heapq.heappop(table)

    if te > s:
        heapq.heappush(table, (te, ts, tidx))
    
    heapq.heappush(table, (e, s, idx))

print(len(table))

 

 

작성한 글에 잘못된 부분이나 문제가 있는 경우 댓글에 작성해 주시면 수정하도록 하겠습니다. 질문도 환영합니다! :)

'알고리즘' 카테고리의 다른 글

이분탐색과 Python의 bisect  (0) 2021.11.01
BOJ :: [2616] 소형기관차(C++)  (0) 2021.10.28
BOJ :: [16929] Two dots  (0) 2021.10.01
BOJ :: [2109] 순회강연  (0) 2021.09.14
BOJ :: [11085] 군사 이동  (0) 2021.09.13
Comments