[프로그래머스] 호텔 대실

박형진·2023년 3월 20일
0

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


1. 코드

이중 포문 코드

def solution(book_time):
    time = [0]*1440
    timetable = [
        (int(start[:2])*60+int(start[3:]), int(end[:2])*60+int(end[3:]))
        for start, end in book_time
    ]
    timetable.sort()

    for start, end in timetable:
        end += 10
        if end >= 1439:
            end = 1439

        for i in range(start, end):
            time[i] += 1

    return max(time)

누적합 방식의 코드

def solution(book_time):
    time = [0]*1450

    for start, end in book_time:
        time[int(start[:2]) * 60 + int(start[3:])] += 1  
        time[int(end[:2]) * 60 + int(end[3:]) + 10] += -1 

    num = 0
    for i in range(len(time)):
        num += time[i]
        time[i] = num
    return max(time)

2. 후기

누적합에 대해 학습했다.
시작점은 1, 종료지점에는 -1의 초기값을 지정한다.

"""
ex) 5분 ~ 15분
5분부터 10분간 점검을 수행한다면
15분부터 사용 가능하다.

output)
A. [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
B. [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
"""

lst = [0] * 30
lst[5] = 1  # A
lst[15] = -1  # A

num = 0
for i in range(len(lst)):
    num += lst[i]
    lst[i] = num  # B
profile
안녕하세요!

0개의 댓글