Algorithm/Algorithm Problem
백준 1931 회의실 배정
땅지원
2021. 11. 16. 16:01
https://www.acmicpc.net/problem/1931
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
n = int(input())
data = []
for i in range(n):
start_time, end_time = map(int,input().split())
data.append([start_time,end_time])
data.sort(key=lambda x: (x[1], x[0]))
last = 0
conut = 0
for i, j in data:
if i >= last:
conut += 1
last = j
print(conut)
회의 시간이 겹치지 않으면서 가능한 회의를 가장 많이 할 수 있게 하려면 어떻게 해야하는가?
빨리 끝나는 회의 순서대로 정렬을 해야한다.
빨리 끝날수록 뒤에서 고려해볼 회의가 많기 때문이다.
빨리 시작하는 순서대로 정렬을 우선 한다면, 오히려 늦게 끝날 수 있기 때문이다.
이를 통해 그리디 알고리즘이라는 것과 정렬을 이용해야 한다는 것을 알았다.
하나 더 고려할 점은
끝나는 시간이 같다면 빨리 시작하는 순서대로 정렬이 되어야 한다.
예를 들자면
2
2 2
1 2
같은 상황때문에 시작하는 시간의 오름차순으로 정렬을 한번 더 해줘야한다.
그렇기 때문에 정렬을 1. 끝나는 시간의 오름차순 2. 시작하는 시간의 오름차순으로 해주어야 한다.