프로그래머스/lv.2

호텔 대실

bingual 2024. 3. 7. 02:08
반응형

 

https://school.programmers.co.kr/learn/courses/30/lessons/155651

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제풀이

 

  • 배열은 입실 시간을 기준으로 오름차 정렬하며 입실, 퇴실 시간은 계산하기 편하게 시간을 분 단위로 변환한다.
  • 입실 시간이 퇴실 시간 + 청소 시간보다 크거나 같다면 해당 방을 청소한 뒤 예약 해주며 그렇지 않다면 새로운 방으로 예약해준다. 이때 해당 방의 다음 이용가능한 시간을 미리 퇴실 시간 + 청소 시간으로 갱신 해주는게 중요하다.
from collections import defaultdict


def solution(book_time):
    room = defaultdict(int)
    for i, time in enumerate(sorted(book_time)):
        start = convert(time[0])
        end = convert(time[1])

        assigned = False
        for j, check_out in room.items():
            if check_out <= start:
                room[j] = end + 10
                assigned = True
                break

        if not assigned:
            room[i] = end + 10

    return len(room)


def convert(time):
    h, m = time.split(":")
    return int(h) * 60 + int(m)