[백준] 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개의 댓글

관련 채용 정보