프로그래머스 - 호텔 대실

김준영·2024년 3월 17일

프로그래머스

목록 보기
1/19
post-thumbnail

문제 링크 ▶︎ 프로그래머스 호텔 대실

문제 전략

이 문제는 을 통해 구현한 문제이다.

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자리 수로 인지해도 되지않을까 고민.

profile
junyoun9dev@gmail.com

0개의 댓글