프로그래머스 호텔 대실 JavaScript

2023년 2월 7일

프로그래머스 호텔 대실

문제 풀이

누적합을 이용해서 푼 문제
시각은 "00:00" 부터 "23:59" 까지 주어진다. 구간을 편하게 나누기 위해 시간을 분으로 변화 시켜 60 * 24 + 10 = 1450 (10분은 청소 시간)의 길이에 구간을 갖게 한다.
매개변수 book_time의 원소들을 조회해 시작 시각과 종료 시각을 얻어 시작 시각에 +1, 종료 시각+10에 -1을 더한다. (10시 10분에 퇴실 후 10분간 청소한 뒤 10시 20분에 입실할 수 있기에 인덱스 종료시각+10에다가 -1을 해야 한다.)

구간 1부터 1449까지 times[i] += times[i-1] 하고 최댓값을 구하면 시각 동안 필요한 최소 객실의 수를 얻을 수 있다.

solution.js
function solution(book_time) {
    const times = new Array(1450).fill(0); // 60*24 = 1440  (+10)

    book_time.forEach(element => {
        const [a, b] = element;
        const a_t =  a.split(":");
        const b_t =  b.split(":");
        const t1 = Number(a_t[0])*60 + Number(a_t[1]);
        const t2 = Number(b_t[0])*60 + Number(b_t[1]);
        times[t1] += 1;
        times[t2+10] -= 1;
    });

    for (let i = 1; i < 1450; i++) {
        times[i] += times[i-1];
    }

    return Math.max(...times);
}

댓글