영업 시간 안의 예약인지 확인하기
자바스크립트 코딩테스트 문제로 time-conversion 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.
문제 설명
예약 시작 시각 startTime, 예약 종료 시각 endTime, 영업 시작 시각 openTime, 영업 종료 시각 closeTime이 HH:MM 형식 문자열로 주어집니다.
예약 시간이 영업 시간 안에 완전히 포함되면 true, 그렇지 않으면 false를 반환하는 checkBookingWithinBusinessHours 함수를 작성하세요.
예약은 시작 시각에 시작해서 종료 시각에 끝나는 구간으로 봅니다. 시작 시각이 영업 시작과 같거나, 종료 시각이 영업 종료와 같은 경우는 허용됩니다.
제한사항
- 모든 시각은
00:00부터23:59까지의 올바른HH:MM형식 문자열입니다. openTime은 항상closeTime보다 이릅니다.- 예약은 같은 날 안에서만 판단합니다.
startTime은endTime보다 반드시 이른 경우에만 유효한 예약입니다.- 반환값은 불리언 값입니다.
예시
- 입력:
"10:30", "11:20", "09:00", "18:00"→ 출력:true - 입력:
"08:50", "09:30", "09:00", "18:00"→ 출력:false - 입력:
"17:30", "18:00", "09:00", "18:00"→ 출력:true - 입력:
"12:00", "12:00", "09:00", "18:00"→ 출력:false
힌트
- 문자열 상태로 비교하기보다
시 * 60 + 분형태의 숫자로 바꾸면 조건이 단순해집니다. - 예약 시작은 영업 시작 이상이어야 하고, 예약 종료는 영업 종료 이하이어야 합니다.
- 예약 시작과 종료가 같은 경우는 유효한 예약으로 보지 않습니다.
해설
이 문제의 핵심은 HH:MM 형식의 시각을 비교하기 쉬운 값으로 바꾸는 것입니다.
예를 들어 "10:30"은 10 * 60 + 30 = 630분으로 바꿀 수 있습니다. 이렇게 네 개의 시각을 모두 분 단위 숫자로 변환하면 문자열 비교나 시간·분을 따로 나눠 처리할 필요가 없습니다.
판단 조건은 세 가지입니다.
- 예약 시작 시각이 예약 종료 시각보다 이르다.
- 예약 시작 시각이 영업 시작 시각보다 같거나 늦다.
- 예약 종료 시각이 영업 종료 시각보다 같거나 이르다.
세 조건을 모두 만족하면 예약 전체가 영업 시간 안에 들어오므로 true를 반환하고, 하나라도 어긋나면 false를 반환합니다.
풀이 순서는 다음과 같습니다.
HH:MM문자열을 분 단위 숫자로 바꾸는 helper 함수를 만듭니다.startTime,endTime,openTime,closeTime을 각각 분으로 변환합니다.start < end인지 먼저 확인합니다.open <= start이고end <= close인지 확인합니다.- 두 조건이 모두 참이면
true, 아니면false를 반환합니다.
이 방식은 입력 문자열 네 개만 고정적으로 처리하므로 시간 복잡도는 O(1)입니다.
코드 작성
starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.
커스텀 테스트
함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]
실행 결과
아직 실행하지 않았습니다.
댓글
문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.