개발하지연
[백준 1931번] 회의실 배정 (python) 본문
문제
한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.
기록
(greedy 4일차) 이쯤되니까 greedy는 정렬하고 반복문 도는 문제가 맞다는 생각이 든다..ㅎ 이 문제는 회의를 최대한 많이 포함해야하기 때문에, 그때그때 끝나는 시간이 가장 빠른 회의를 찾아 포함시켰다.
코드
from sys import stdin
N = int(stdin.readline())
conf = []
for i in range(N):
s, e = map(int, stdin.readline().split())
conf.append((s, e))
conf.sort(key=lambda x: (x[0], x[1]))
total = 0
last_start = 0
last_end = 0
for start, end in conf:
if last_end<=start:
total+=1
last_start, last_end = start, end
elif last_end>end :
last_start, last_end = start, end
print(total)
먼저 출발시간, 도착시간 순으로 정렬한 뒤, 반복문을 돌면서 빨리 끝나는 회의를 찾는다. 만약 회의 시작시간이 앞의 회의가 끝나는 시간 이후일 때는 이전 회의를 저장하고 새롭게 회의를 찾는다.
'알고리즘' 카테고리의 다른 글
[백준 20365번] 블로그2 (python) (0) | 2021.07.14 |
---|---|
[백준 1541번] 잃어버린 괄호 (python) (0) | 2021.07.14 |
[백준 20115번] 에너지 드링크 (python) (0) | 2021.07.13 |
[백준 11508번] 2+1 세일 (python) (0) | 2021.07.13 |
[백준 11399번] ATM (python) (0) | 2021.07.13 |
Comments