본문 바로가기

Algorithm

[파이썬] 백준 1931번: 회의실 배정

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

 

1931번: 회의실 배정

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

www.acmicpc.net

1. 회의 시간을 받은 뒤에 끝나는 시간을 기준으로 정렬해줍니다.

예시의 경우 아래와 같이 정렬이 됩니다.

meeting_sort = sorted(meeting, key=lambda x: [x[1], x[0]])
meeting_sort

[(1, 4),
 (3, 5),
 (0, 6),
 (5, 7),
 (3, 8),
 (5, 9),
 (6, 10),
 (8, 11),
 (8, 12),
 (2, 13),
 (12, 14)]
 

 

2. 처음 회의 시작 시간을 0으로 시작 (start = 0) 합니다.

다음 번 회의 시작 시간이 이전 번 회의가 끝나는 시간보다 크거나 같아야 하기 때문에,

이 점을 유의하면서 코드를 정의해줍니다.

cnt = 0 #가능한 회의 개수
start = 0 #처음 시작 가능한 시간
for times in meeting_sort: #정렬된 회의 시간 for loop
    if times[0] >= start: #회의가 시작 가능한 경우
        start = times[1] #다음 번 회의가 시작 가능한 시간을 업데이트
        cnt += 1 #회의 개수 +1
print(cnt)

 

전체 코드는 다음과 같습니다.

n = int(input())
meeting =  [tuple(map(int, input().split())) for _ in range(n)]
meeting_sort = sorted(meeting, key=lambda x: [x[1], x[0]])

cnt = 0
start = 0
for times in meeting_sort:
    if times[0] >= start:
        start = times[1]
        cnt += 1
print(cnt)