코딩테스트

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

여유로운 프론트엔드 개발자 2024. 8. 29. 15:19

문제

 

프로그래머스

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

programmers.co.kr

 

풀이

  (1) 1분마다 사용하는 객실의 인원수를 구하기 위해 timeArr을 0으로 초기화

  (2) 한 번 사용한 객실은 퇴실 시간을 기준으로 10분 후 사용하기 때문에 endTime에 10을 더해준다

  (3) 입실 시간과 퇴실 시간 사이 분마다 timeArr안 요소를 1씩 늘린다.

 

최종적으로 만들어진 timeArr의 최댓값이 곧 최소로 필요한 객실의 수가 된다.

const getTime = (time) => {
    const [hour, minute] = time.split(":");
    return +hour * 60 + +minute;
}

function solution(book_time) {
    const timeArr = Array.from({length: 3600}, v => 0); // 1시간을 60분으로 -> 60 * 60 
    book_time.forEach((time) => {
        const startTime = getTime(time[0]);
        const endTime = getTime(time[1]) + 10;

        for (let i = startTime; i < endTime; i++) {
            timeArr[i]++;
        }
    });

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

 

결론

겹치는 시간을 비교하기 위해 시를 분으로 치환하여 문제를 풀었다.

가장 큰 값을 갖는 요소가 곧 손님들에게 최소로 필요한 객실의 수가 된다.

구현 방법을 고민해야 시간 초과 없이 풀 수 있는 문제같다.