코딩테스트
[프로그래머스] 호텔 대실 (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);
}
결론
겹치는 시간을 비교하기 위해 시를 분으로 치환하여 문제를 풀었다.
가장 큰 값을 갖는 요소가 곧 손님들에게 최소로 필요한 객실의 수가 된다.
구현 방법을 고민해야 시간 초과 없이 풀 수 있는 문제같다.