문제 링크 ▶︎ 프로그래머스 호텔 대실
이 문제는 힙을 통해 구현한 문제이다.
book_time 으로 받은 문자열 2차원 배열을 모두 정수로 바꿔주고 time 이라는 힙 배열에 입실 시간을 기준으로 push해준다.
즉 time 힙 배열에서 pop 하면 time 배열에서 가장 빠른 입실 시간이 나온다.
time 배열이 있는 동안 while문을 돌면서, lst 라는 배열이 존재하지 않으면 퇴실 시간, 입실 시간 순으로 append 해준다.
만약 lst 가 존재한다면, lst 에서 pop 한 값과 time 에서 pop 한 값을 비교해 '퇴실 + 10 > 입실' 이라면 lst 에서 pop 한 값을 다시 넣고 time 에서 pop 한 값도 퇴실, 입실 순으로 다시 넣는다.
객실을 의미하는 lst 배열의 최대 길이 수가 필요한 객실의 수가 된다.
from heapq import heappop, heappush
def solution(book_time):
time = []
lst = []
answer = 0
for i,arr in enumerate(book_time):
h1,m1 = map(int,arr[0].split(':'))
h2,m2 = map(int,arr[1].split(':'))
heappush(time,[60*h1 + m1,60*h2 + m2])
while time:
a,b = heappop(time)
if not lst:
lst.append([b,a])
else:
room = heappop(lst)
if room[0] + 10 > a:
heappush(lst,room)
heappush(lst,[b,a])
else:
heappush(lst,[b,a])
answer = max(answer, len(lst))
return answer
① 매순간 최댓값을 구하지 않고, 마지막 lst 배열의 길이로 출력해도 정답이던데 이 부분 고민.
② "15:00", "17:00" 으로 입력이 들어오기 때문에 시각의 60을 곱해 분으로 만드는 방법이 아니라 시각에 100을 곱해서 1500,1700 이렇게 4자리 수로 인지해도 되지않을까 고민.