알고리즘/프로그래머스

[프로그래머스] 호텔 대실 LV2 by 파이썬 (python)

코딩하는이씨 2023. 7. 19. 14:10
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr

 

문제 이해

1. 최소한의 객실만을 사용하여 예약손님 받기

2. 퇴실 기준 10분이후에 다음 손님 사용 가능

3. 00:00 ~ 23:59

 

접근법

1. heapq를 사용하여 객실의 끝나는 시간을 저장하기

2. 가장 빨리 끝나는 시간과 다음 이용자의 시작 시간을 비교

3. 다음 이용자의 시작시간이 더 느리다면 같은 객실을 이용 가능한 것 => heappop으로 앞의 시간 제거

4. 마지막에 heapq에 들어있는 갯수가 필요한 방의 갯수

 

 

코드

import heapq
def solution(book_time):
    book_time = sorted(book_time)
    rooms = []
    for s, e in book_time:
        if rooms and rooms[0] <= s:
            heapq.heappop(rooms)
        x = (e.split(":"))
        x[1] = int(x[1]) + 10
        x[0] = int(x[0])
        
        if x[1] >= 60:
            x[1] -= 60
            x[0] = x[0] + 1
        if x[0] > 24:
            x[0] -= 24
        
        if x[0] < 10:
            x[0] = "0" + str(x[0])
        if x[1] <10:
            x[1] = "0" + str(x[1])
        
        newe = str(x[0])+ ":" + str(x[1])
        heapq.heappush(rooms, newe)
        
    return len(rooms)

heapq?

- 이진 트리 기반의 최소 힙 자료구조를 제공한다. 

- 항상 정렬된 상태로 추가되고 삭제되며 min heap에서 가장 작은 값은 언제나 인덱스 0인 이진트리의 루트에 위치한다.

 

사용법

import heapq

//추가
heapq.heappush(배열, 값)
//삭제
heapq.heqpppop()
728x90
반응형