[BACKJOON] 1931 회의실배정

shelly·2020년 9월 14일
0

백준문제풀이

목록 보기
4/5

문제

한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.

나의 접근

  1. 최대한 많은 회의를 하기 위해선, 최대한 짧은 회의를 많이 해야한다.
  2. 위의 생각으로 접근하였으나, 시작하자마자 끝나는 경우를 카운팅하기 매우 어려웠다.
  3. 또 다른 접근법으로 최대한 빨리 끝나는 회의들로만 가득 채우는 방법이 있다.
  4. 회의 종료시간을 정렬 -> 종료시간이 같다면 시작시간으로 정렬

코드

N = int(input())
time_table = []

for i in range(N):
    start, end = map(int, input().split())
    time_table.append([start, end])

time_table = sorted(time_table, key = lambda x : (x[1], x[0]))
end = time_table[0][1]
i = 1
cnt = 1
while i < len(time_table):
    if(time_table[i][0] >= end):
        end = time_table[i][1]
        cnt += 1
    i+=1
print(cnt)

소요 시간

2시간

0개의 댓글