백준_1931_회의실 배정(그리디)

맹민재·2023년 4월 5일
0

알고리즘

목록 보기
41/134
from sys import stdin
n = int(input())
room = [[] for _ in range(n)]
for i in range(n):
    room[i] = list(map(int, stdin.readline().split()))

room.sort(key= lambda x : [x[1], x[0]])

cnt = 1
time = room[0][1]

for i in range(1, n):
    if time <= room[i][0]:
        cnt += 1
        time = room[i][1]

print(cnt)

끝나는 시간 정렬 후 시작 시간 정렬해서 구할 수 있는 문제
끝나는 시간을 저장했다가 끝나는 시간과 같거나 큰 시작시간이 들어오면 바꿔주면서 숫자를 세는 방식으로 해결


이 문제에서 주의할 점은 끝나는 시간만으로 정렬하면 안된다는 것이다.
끝나는 시간만으로 정렬했을 때는 답이 틀리게 되는데
이에 대한 반례는 아래와 같다

3
1 3
8 8
4 8

이 경우 끝나는 시간으로만 정렬하게 되면 2개가 된다. 그렇기 때문에 시작 시간에 대해서도 정렬이 필요하다.

이러한 반례 예시를 떠올리기 힘들어서 많이 재시도 했다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글