[프로그래머스] 호텔 대실 파이썬

문제 설명

호텔을 운영하는 코니는 최소한의 방으로 예약을 하려고 한다.

1회 사용한 객실은 체크아웃 시간에 따라 10분간 청소 후 다음 손님이 이용하실 수 있습니다.


문자열 형태의 예약 시간을 포함하는 2차원 배열 book_time이 매개변수가 제공되면 Connie가 필요로 하는 최소 방 수를 반환하는 solve 함수를 완성합니다.


제한
  • 1 ≤
  book_time

길이 ≤ 1,000

  • book_time(i)

    (“HH:MM”, “HH:MM”) 형식의 배열입니다.

    • (공간 시작 시간, 공간 종료 시간) 형태.
  • 시간은 HH:MM 형식의 24시간 표기법을 따르며 “00:00″에서 “23:59″까지 지정됩니다.

    • 자정 이후에는 절대 예약하지 않습니다.

    • 시작 시간은 항상 종료 시간 이전입니다.


I/O 예시
book_time 결과
((“15:00”, “17:00”), (“16:40”, “18:20”), (“14:20”, “15:20”), (“14:10”, “19:20”), (“18:20”, “21:20”))
((“09:10”, “10:10”), (“10:20”, “12:20”)) 하나
((“10:20”, “12:30”), (“10:20”, “12:30”), (“10:20”, “12:30”))

I/O 예시 설명

I/O 예제 #1

예 1
위의 그림과 같습니다.

I/O 예제 #2

첫 번째 손님이 오전 10시 10분에 나가서 10분간 청소를 하고, 두 번째 손님이 오전 10시 20분에 입실하여 사용하기 때문에 방 하나만 있으면 됩니다.

I/O 예제 #3

게스트 3명이 모두 같은 시간대를 예약했으므로 객실이 3개 필요합니다.

참조 응답 응답

https://americanoisice.201

  • 먼저 종료시간을 따로 저장해서 heapq와 비교를 해보았지만 실패했습니다.

  • 그래서 찾아보니 아래와 같이 dic의 key로 시작시간과 종료시간을 10분으로 설정하여 값을 더해주는 방법이 있었습니다.

    • 겹치는 간격은 공간이 여전히 필요함을 의미하므로 1을 더합니다.

  • 가격대비 깔끔하고 간편해서 너무 좋은 방법인거 같아요.
  • 많이 배웠습니다.

def time_to_minute(time):
    return int(time(:2)) * 60 + int(time(3:))

def solution(book_time):
    dic = {}
    for book in book_time:
        start = time_to_minute(book(0))
        end = time_to_minute(book(1))
        for t in range(start, end+10):
            dic
    return max(dic.values())