호텔 대실

최민수·2023년 4월 13일
0

알고리즘

목록 보기
53/94
⭐️
import heapq

def solution(book_time):
    answer = 0
    times = []
    
    # IN -> 1, OUT -> 0
    for start, end in book_time:
        times.append([int(start[:2])*60 + int(start[3:]), 1])
        times.append([int(end[:2])*60 + int(end[3:])+10, 0])
    times.sort()
    
    # 입실, 퇴실 구분하여 최댓값 갱신
    now = 0
    for item in times:
        if item[1] == 1:
            now += 1
        else:
            now -= 1
        answer = max(answer, now)
    
    return answer

이 문제의 포인트는 각각의 item이 꼭 어떤 방에 들어갈 것인지 정하지 않아도 된다는 것이다.

오히려 위와 같이 풀면 구현이 너무 복잡해지고, 어떤 방에 어떤 우선순위로 들어갈지 로직을 세우는 과정에서 예외 케이스가 많이 생겨 틀릴 확률이 높다.

입실과 퇴실을 하나의 배열에 넣을 생각을 하는 아이디어, 그리고 정렬한 리스트를 순회하며 입실이라면 방 하나를 추가, 퇴실이라면 방 하나를 빼면 해결된다는 생각이 좋은 접근이다. 그 과정에서 사용했던 최대 방 개수를 유지해주면 되는 것이다.

만약 입실과 퇴실이 동시 시간이라면 퇴실 item을 먼저 처리해야 한다.
왜냐하면 퇴실로 방 개수를 줄일 수 있는데도 불구하고 입실이 먼저 이루어지면 사용할 수 있는 최소 방 개수의 영향을 주기 때문이다.


문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/155651?language=python3

profile
CS, 개발 공부기록 🌱

0개의 댓글