[백준] 19598번 - 최소 회의실 개수 Python

Tuna·2022년 2월 4일
1

Greedy

목록 보기
1/22

문제


서준이는 아빠로부터 N개의 회의를 모두 진행할 수 있는 최소 회의실 개수를 구하라는 미션을 받았다. 각 회의는 시작 시간과 끝나는 시간이 주어지고 한 회의실에서 동시에 두 개 이상의 회의가 진행될 수 없다. 단, 회의는 한번 시작되면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작 시간은 끝나는 시간보다 항상 작다. N이 너무 커서 괴로워 하는 우리 서준이를 도와주자.

입력


첫째 줄에 배열의 크기 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 2312^{31}−1보다 작거나 같은 자연수 또는 0이다.

출력


첫째 줄에 최소 회의실 개수를 출력한다.

예제 입력 1


3
0 40
15 30
5 10

예제 출력 1


2

2개 회의실로 3개 회의를 모두 진행할 수 있다. 예를 들어, 첫번째 회의실에서 첫번째 회의를 진행하고 두번째 회의실에서 두번째 회의와 세번째 회의를 진행하면 된다. 1개 회의실로 3개 회의를 진행할 수 없고 3개 이상의 회의실로 3개 회의를 모두 진행할 수 있지만 최소 회의실 개수를 구해야 하기 때문에 2가 정답이 된다.

예제 입력 2


2
10 20
5 10

예제 출력 2


1

풀이


import heapq as hq
import sys
input = sys.stdin.readline

n = int(input().rstrip())
a = []

for _ in range(n):
    a.append(list(map(int, input().rstrip().split())))

a.sort(key = lambda x: x[0])
cnt = 1

b = [0]

for start ,end in a:
    if start >= b[0]:
        hq.heappop(b)
    else:
        cnt+=1
    hq.heappush(b, end)

print(cnt)

정리


  • 시작시간을 기준으로 오름차순으로 정렬한다.
  • 최소힙(우선순위 큐)에 저장할 때 현재의 시작시간이 현재 힙에 들어있는 값보다 크거나 같으면 꺼내고, 아니면 count를 증가 시킨다. 그리고 현재의 끝나는 시간을 힙에 넣어준다.
profile
BE 개발자가 되기 위해 노력하는 사람

0개의 댓글