bong-u/til

프로그래머스 - 호텔 대실 (L2)

수정일 : 2023-07-16

 1import heapq
 2
 3def time_calc(time):
 4    time_split = time.split(':')
 5    return int(time_split[0])*60 + int(time_split[1])
 6
 7def solution(book_time):
 8    time = []
 9    q = []
10    for start, end in book_time:
11        time.append((time_calc(start), time_calc(end)))
12    time.sort(key=lambda x: x[0])
13    print (time)
14    for start, end in time:
15        if q:
16            top = heapq.heappop(q)
17            if top > start:
18                heapq.heappush(q, top)
19            heapq.heappush(q, end+10)
20        else:
21            heapq.heappush(q, end+10)
22    return len(q)

문제

  • 호텔의 예약시간이 담긴 2차원 배열이 주어진다 ex) [[“12:00”, “12:30”], [“15:00”, “16:00”]]
  • 퇴실 시간 10분 이후에 다음 손님이 입실 할 수 있다
  • 최소 객실의 개수를 구하여라
  • TC
    • input

      [[“15:00”, “17:00”], [“16:40”, “18:20”], [“14:20”, “15:20”], [“14:10”, “19:20”], [“18:20”, “21:20”]]

    • ouput

      3

해결방법

  • 최소 힙에 퇴실시간 + 10분 을 넣는다
  • 다음 손님의 입실시간과 비교해서 퇴실시간이 더 빠르면 퇴실시간을 빼고 다시 넣는다
  • 힙에 남아있는 퇴실시간의 개수가 객실의 개수이다