백준 1931 회의실 배정

DARTZ·2022년 5월 10일
0

알고리즘

목록 보기
48/135
import sys

sys.stdin = open('input.txt', 'rt')
input = sys.stdin.readline

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

for _ in range(N):
    graph.append(list(map(int, input().split())))

graph.sort(key=lambda x: (x[1], x[0])) # lamda를 통해 회의가 가장 일찍 끝나는 시간대로 정렬하였다 그 다음 시작시간대로 정렬을 해줘야한다! 그래야지 그리디 알고리즘이 성립한다.

end = graph[0][1] # 제일 앞에 있는게 가장 끝나는 시간이 빠르니 end 변수에 넣어주고
count = 1

for i in range(1, N):
    if end <= graph[i][0]: # 만약에 현재 끝나는 시간보다 클 경우
        end = graph[i][1] # 끝나는 시간을 업데이트 해주고
        count += 1 # 카운트를 더해준다.

print(count)

중요!

끝나는 시간이 같다면 빨리 시작하는 순서대로 정렬이 되어야 한다.
예를 들자면
2
2 2
1 2

의 경우 이 상태로 한다면 (2 2)가 되고 (1 2)는 (2 2)의 끝나는 시간보다 시작시간이 일찍이기 때문에 무시되어 1번의 회의가 진행된다고 나온다. 하지만 정렬을 통해 (1 2)가 먼저 선택되면 (2 2)도 선택이 가능해지기 때문에 가능한 회의는 2번으로 결정된다.

출처

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

1개의 댓글

comment-user-thumbnail
2022년 5월 11일

잘보고 갑니다 👍

답글 달기