문제
https://www.acmicpc.net/problem/1931
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
풀이
import sys
input = sys.stdin.readline
n = int(input())
t = []
for _ in range(n):
a,b = map(int,input().split())
t.append([a,b])
end,cnt=0,0
for a,b in sorted(t,key=lambda x:(x[1],x[0])): # 회의의 끝나는 시간, 시작시간을 오름차순으로 정렬
if end <= a: # 그 전의 회의의 끝나는 시간보다 현재 회의의 시작시간이 더 크다면
cnt+=1 # 회의 개수 +1
end = b # 회의 마치는 시간 넣어줌
print(cnt)
각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아야한다.
회의의 개수를 찾기 위해서는 현재 회의가 끝난 시간보다 다음 회의의 시작 시간이 더 큰 개수를 찾으면된다.
최대한 많은 회의를 잡기 위해서는 회의가 빨리 끝나는 순대로 찾으면된다. 즉, 회의의 끝나는 시간이 빠른 순서대로 정렬하면 된다.
ex) [[3, 8],[1, 3],[0, 6]]
정렬하기 전 - [3,8]의 회의만 진행할 수 있어 1번의 회의만 가능하다.
정렬한 후 - [[1, 3],[0, 6],[3, 8]]가 되어 [1,3],[3,8]의 회의 , 총 2개의 회의가 가능하다.
정렬 후 끝나는 시간이 같을 수 있는 조건도 생각해야한다. 이때는 회의의 시작시간순으로 정렬해야한다.
ex) [[4,4],[3,4]]
정렬하기 전 - [4,4]의 회의만 진행할 수 있어 1번의 회의만 가능하다.
정렬한 후 - [3,4],[4,4] , 최대 2번의 회의가 가능하다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #1541 - 잃어버린 괄호 (0) | 2022.01.18 |
---|---|
[Python] 백준 #11047 - 동전 0 (0) | 2022.01.17 |
[Python] 백준 #11725 - 트리의 부모 찾기 (0) | 2022.01.15 |
[Python] 백준 #3273 - 두 수의 합 (0) | 2022.01.14 |
[Python] 백준 #11399 - ATM (0) | 2022.01.13 |