from collections import deque
def solution(book_time):
answer = 0
queue = deque()
book_time.sort()
for i in range(len(book_time)):
start, end = book_time[i]
start = int(start[:2]) * 60 + int(start[3:])
end = int(end[:2]) * 60 + int(end[3:])
if i == 0:
queue.append(end + 10)
answer += 1
else:
flag = False
for time in queue:
if start >= time:
queue.remove(time)
queue.append(end+10)
flag = True
break
if not flag:
queue.append(end+10)
answer += 1
return answer
예약을 시간순으로 처리하기 위해 예약 시간이 담긴 리스트를 정렬한다. 정렬된 리스트의 각 예약에 대해 다음을 수행한다.
예약 시간을 분 단위로 변환한다.
book_time 리스트에 있는 예약 시간을 HH:MM 형식에서 분 단위로 변환한다.
각 예약을 처리하면서 다음 단계를 따른다.
1. 첫 번째 방을 할당하고, 해당 예약의 종료 시간에 10분을 더한 값을 queue 에 추가한다.
( 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있다. )
2. 동시에 answer 변수를 1 증가시켜 첫 번째 방을 사용하였음을 나타낸다.
사용 가능한 방을 찾는 루프를 실행한다.
1. queue 에 저장된 예약의 종료 시간을 하나씩 확인한다.
2. 사용 가능한 방을 찾으면, 해당 방을 할당하고 큐에서 해당 예약의 종료 시간을 제거하고, 그 예약의 종료 시간에 10분을 더한 값을 queue 에 추가한다.
3. 사용 가능한 방을 찾지 못하면, 새로운 방을 할당하고, 해당 예약의 종료 시간에 10분을 더한 값을 queue 에 추가한다.
동시에 answer 변수를 1 증가시켜 새로운 방을 사용하였음을 나타낸다.