개인 공부 공간/Algorithm

BOJ(백준) 1931번 회의실 배정 파이썬

Hoon Kang 2021. 3. 22. 22:14
 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net


코드

import sys
r=sys.stdin.readline
N=int(r())
l=[[0,0] for _ in range(N)]
res=[]
for i in range(N):
    start,end=map(int,r().split())
    l[i][0] = start
    l[i][1] = end
l.sort(key=lambda x:(x[1],x[0]))
res.append(l[0])
for i in range(1,N):
    if res[-1][1] <= l[i][0]:
        res.append(l[i])
print(len(res))

 

해설

Greedy 알고리즘의 대표적인 활동 선택 문제(Activity Selection Problem) 예제이다. 인풋의 회의 시작시간과 끝나는 시간들을 2차원 배열로 저장 후 끝나는 시간 순으로 정렬하였다. 그 후 끝나는 시간이 동일한 회의들은 다시 시작 시간으로 정렬하였다. 그 후 빈 리스트 res 에 첫 회의 시작 시간, 끝나는 시간을 추가해준 후 포문을 순회하며 res 의 마지막 회의의 끝나는 시간보다 l 의 회의 시작 시간이 같거나 늦은 경우 res 에 추가하였다.

 

결과

회의실배정결과.PNG