[Programmers] 호텔 대실 (정렬 Lv. 2) - Python

꼬마요리사레미·2023년 11월 1일

Algorithm

목록 보기
41/41

1. 문제

호텔 대실

2. 풀이

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

3. 로직

예약을 시간순으로 처리하기 위해 예약 시간이 담긴 리스트를 정렬한다. 정렬된 리스트의 각 예약에 대해 다음을 수행한다.

  1. 예약 시간을 분 단위로 변환한다.
    book_time 리스트에 있는 예약 시간을 HH:MM 형식에서 분 단위로 변환한다.

  2. 각 예약을 처리하면서 다음 단계를 따른다.

  • 첫 번째 예약인 경우
1. 첫 번째 방을 할당하고, 해당 예약의 종료 시간에 10분을 더한 값을 queue 에 추가한다.
( 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있다. )
2. 동시에 answer 변수를 1 증가시켜 첫 번째 방을 사용하였음을 나타낸다.
  • 그 이후 예약인 경우
사용 가능한 방을 찾는 루프를 실행한다.
1. queue 에 저장된 예약의 종료 시간을 하나씩 확인한다.
2. 사용 가능한 방을 찾으면, 해당 방을 할당하고 큐에서 해당 예약의 종료 시간을 제거하고, 그 예약의 종료 시간에 10분을 더한 값을 queue 에 추가한다.
3. 사용 가능한 방을 찾지 못하면, 새로운 방을 할당하고, 해당 예약의 종료 시간에 10분을 더한 값을 queue 에 추가한다.
동시에 answer 변수를 1 증가시켜 새로운 방을 사용하였음을 나타낸다.
  1. 최종적으로 필요한 방의 수 반환한다.
    answer 변수에는 필요한 최소한의 방의 수가 저장되어 있으므로 이를 반환한다.

0개의 댓글