[ BOJ / Python ] 1374번 강의실

황승환·2022년 7월 7일
0

Python

목록 보기
348/498


이번 문제는 heapq와 그리디 알고리즘을 활용하여 해결하였다. 강의의 번호와 시작 시간, 종료 시간을 입력 받으면, heapq에 (시작 시간, 종료시간, 강의 번호) 형식으로 삽입하여 강의 시작 순으로 정렬되도록 한다. 그리고 heapq를 순회한다. 강의실 리스트에는 이전 강의들의 종료 시간을 넣어 현재 강의가 들어갈 수 있는 강의실이 있는지 시작 시간과 전 강의의 종료 시간을 비교하여 결정한다. 만약 조건이 성립한다면 그 강의실의 값을 현재 강의의 종료 시간으로 갱신해주고, 그렇지 않다면 새로운 강의실을 추가하여 현재 종료 시간을 넣어주도록 하였다. 이렇게 되면 강의실 리스트에 대한 pop이 이뤄지지 않았기 때문에 총 몇개의 강의실이 필요한지 알 수 있다.

Code

import heapq
n = int(input())
lectures = []
for _ in range(n):
    a, b, c = map(int, input().split())
    heapq.heappush(lectures, (b, c, a))
rooms = []
while lectures:
    s, e, num = heapq.heappop(lectures)
    if not rooms:
        heapq.heappush(rooms, e)
    else:
        chk = False
        for i in range(len(rooms)):
            if rooms[i] <= s:
                rooms[i] = e
                chk = True
                break
        if not chk:
            heapq.heappush(rooms, e)
print(len(rooms))

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글