프로그래머스/Lv.2
프로그래머스 JS 호텔 대실 (겹치는 시간대)
sakuraop
2023. 12. 10. 01:25
호텔 대실 (20) 문제 보기
문제 조건
목표: 대실이 가장 많을 때 몇 개의 방이 예약되어 있는지를 구해야 한다.
최소한의 객실만 사용한다.
한 번 사용한 객실은 퇴실 시간을 기준으로 10분 청소시간이 필요하다.
문제 풀이
1. 3600개의 0을 지닌 배열을 만든다.
2. [시작시간, 퇴실시간 + 10]을 구한다.
3. for문으로 (시작시간)~(퇴실시간+10) 구간의 요소에 +1 해준다.
4. 최대 값을 Math.max()로 찾는다.
코드
function getMinute(time) {
const [hour, min] = time.split(":");
return hour * 60 + Number(min);
}
function solution(book_time) {
const timeTable = Array(60 * 60).fill(0);
// [체크인시간, 퇴실시간+10] 구하기
book_time.forEach((time) => {
const checkInMinute = getMinute(time[0]);
const checkOutMinute = getMinute(time[1]) + 10;
// 포함되는 구간의 요소에 +1 해주기
for (let i = checkInMinute; i < checkOutMinute; i++) {
timeTable[i]++;
}
});
return Math.max(...timeTable);
}
00:00부터 23:59 까지 분 단위로만 구하면 되기 때문에
최대 연산은 3600 * 1000 밖에 안 된다. 0.1초도 안걸린다.
정렬, 그리디 같은 방법 어찌저찌 쓰면 좋을 것 같긴 한데,
그건 필요하면 생각해보기로 하고 빠르게 풀 수 있을 것 같으니 그냥 복잡하게 생각하지 않고 풀기로 했다.
for문을 이용해서 입실시간-퇴실시간 사이 구간에 객실 수를 +1 해주기만 하면 된다.