본문 바로가기
문제풀이

호텔 대실

by 이숴 2023. 2. 22.
반응형

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

 

프로그래머스

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

programmers.co.kr

[문제]

요약

입력으로 들어오는 예약이 겹치지 않도록 잘 조율해서 배치한다.

이렇게 배치 했을때 최소로 배치할 수 있는 방 갯수를 반환한다.

 

본인은 이렇게 해결했습니다.

1. 입력된 예약 배열의 자료형을 String에서 시간 객체로 변환하여 다시 저장한다.

2. 탐욕법을 사용해서 해결하기 위해 최소시간 기준으로 정렬하여 탐색이 효율적으로 동작하게 한다.

3. 예약을 하나씩 확인하며 현재 예약시간이 비어있는 방을 탐색한다.

4. 확인하는 예약시간대가 비어있는 방에 바로 append 한다.

5. append 할 수 있는 방이 있으나 마지막 퇴실시간과 가장 근접한 방에 입력되도록 flag를 새워 가장 근접한 방을 찾도록 한다.

6. 방들의 갯수를 반환한다.

 

import datetime

def solution(book_time):
    for book in book_time:
        book[0] = datetime.datetime.strptime(book[0], "%H:%M")
        book[1] = (datetime.datetime.strptime(book[1], "%H:%M") + datetime.timedelta(minutes=10))
    flag = 1
    book_time.sort(key=lambda x:x[0])
    rooms = [book_time.pop(0)]
    for book in book_time:
        for room in rooms:
            tmp = room
            while type(tmp) != datetime.datetime: tmp = tmp[-1]
            if tmp <= book[0]:
                room.append(book)
                flag = 0; break
            else: flag = 1
        if flag:
            rooms.append(book)
    print(rooms)
    return len(rooms)

 

문제를 풀고나서 느낀 것이 코드 본문에 datetime보다는 입력된 예약 시간들을 (h*60+m)과 같이 정수형으로 저장해서 계산하는 것이 조금 더 빠를 것같다는 생각이 들었습니다.

반응형

'문제풀이' 카테고리의 다른 글

디펜스 게임 - 구현  (0) 2023.02.27
1309 - 동물원  (0) 2023.02.24
두 수의 차  (0) 2023.02.21
오픈 채팅방  (0) 2021.10.26
이진 변환 반복하기  (0) 2021.10.26

댓글