본문 바로가기

Algorithm/BOJ

백준 (BOJ) - 1931 회의실 배정 [Python]

반응형

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

 

1931번: 회의실 배정

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

www.acmicpc.net

이번 문제의 핵심은 어떻게 해야 가장 많은 개수의 회의를 넣을 수 있는지 아는 것이다. 

나는 1. 일찍 끝나는 회의부터, 2. 종료 시간이 같다면 나중에 시작하는 회의 순으로 정렬시켰다. 

코드

n = int(input())
s = []
for i in range(n):
    first, second = map(int, input().split())
    s.append([first, second])
s = sorted(s, key=lambda a: a[0])
s = sorted(s, key=lambda a: a[1])

last = 0
cnt = 0


for i, j in s:
    if i >= last:
        cnt += 1
        last = j
print(cnt)

시작하는 시간에 대해 오름차순으로 정렬해주었고, 그 후 끝나는 시간에 대해 정렬해주었다. 

정렬하는 부분까지는 문제가 없었으나, 정렬 후에 이전 회의가 끝나는 시간보다  늦게 시작하는 회의만 카운트 해주는 부분에서 좀 시행착오가 있었다. 처음에는 이전 회의 종료 시간보다 일찍 시작 하는 회의들을 배열에서 제거 해주고 남은 회의들 개수만 세는 식으로 하였는데 자꾸 런타임 에러가 나서 다른 방식으로 변경하였다. 

 

for i, j in s:     <--- i,j는 0,0부터 가 아니라 s 배열의 s[0][0] ~ s[11][11] 나타내는 것이다 (range in s 랑 헷갈리지 말 것 !)

 

반응형