Cherry & Cherish
[Python3] 백준(Baekjoon) 강의실 배정 11000 본문
문제 :
수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다.
김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다.
참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.)
수강신청 대충한 게 찔리면, 선생님을 도와드리자!
접근 :
우선순위 큐를 사용해서 문제를 풀 수 있다.
이 문제는 여러 개의 강의실을 사용할 수 있지만, 비슷한 유형의 정렬 그리디 문제 중 한 개의 강의실을 여러개가 나눠서 예약하는 경우에 대한 문제가 많다. 그런 문제들로 연습하고, 이 문제를 풀어보면 더욱 좋을 것 같다. (백준 1931 회의실 배정 / SWEA 화물도크)
풀이 :
import sys
import heapq
input = sys.stdin.readline
n = int(input())
lecture_list = [list(map(int, input().split())) for _ in range(n)]
lecture_list.sort() #회의 시작시간을 기준으로 정렬
queue = []
heapq.heappush(queue, lecture_list[0][1]) # 첫 회의의 종료시간을 큐에 넣음
for i in range(1, n):
if lecture_list[i][0] < queue[0]: # 지금 강의 종료시간보다 다음 강의시작이 빠를때 -> 강의실을 새로 만들어야 됨
heapq.heappush(queue, lecture_list[i][1])
else: # 지금 강의 끝나고 다음 강의를 시작할 수 있을 때 -> 이어서 강의하기
heapq.heappop(queue)
heapq.heappush(queue, lecture_list[i][1])
print(len(queue))
'Algorithm > Baekjoon' 카테고리의 다른 글
[Python3] 백준(Baekjoon) 과제 13904 (0) | 2023.04.07 |
---|---|
[Python3] 백준(Baekjoon) A와B 12904 (0) | 2023.04.04 |
[Python3] 백준(Baekjoon) 나무 자르기 2805 (0) | 2023.02.01 |
[Python3] 백준(Baekjoon) 숫자카드2 10816 (0) | 2023.02.01 |
[Python3] 백준(Baekjoon) 숫자카드 10815 (0) | 2023.02.01 |
Comments