STUDY/Algorithm

[백준] 11000 강의실 배정 python

sinawi95 2022. 2. 27. 11:38
728x90

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

 

11000번: 강의실 배정

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

www.acmicpc.net

그리디 알고리즘으로 풀었다. 

강의 시간을 정렬한 다음 모든 강의 시간을 순회하면서 힙 answer에 데이터를 추가하거나 수정하는 방식이다.

추가하는 시간은 해당 강의실의 강의가 끝나는 시간을 나타낸다. python의 heap은 최소힙이므로 0번째(top)가 최솟값이 되고 항상 모든 강의실 중 가장 빨리 끝나는 시간을 나타내므로, 강의실을 계속 사용해도 되는지 아니면 하나 더 사용해야하는지 판단할수 있다.

import sys; input = sys.stdin.readline
from heapq import heappop, heappush
def main():
    N = int(input())
    lst = sorted([tuple(map(int, input().split())) for _ in range(N)])

    answer = []
    for s, t in lst:
        if not answer:
            heappush(answer, t)
        else:
            if s >= answer[0]:
                heappop(answer)
                heappush(answer, t)
            else:
                heappush(answer, t)
    print(len(answer))

if __name__ == "__main__":
    main()