후기

처음에는 예약을 시작 시간순으로 정렬한 뒤, 각 객실에 들어 있는 예약들과 새로운 예약을 하나씩 비교하여 방을 배정하려고 했었다.

객실별로 예약 목록을 배열에 저장하고, 기존 예약과 겹치지 않는 객실이 있다면 그 객실에 새로운 예약을 추가하고, 들어갈 수 있는 객실이 없다면 새로운 객실을 만드는 방식이었다. 실제 호텔에서 객실을 하나씩 배정하는 과정과 비슷했기 때문에 직관적으로 풀 수 있을 것이라고 생각했었다.

시간을 HHMM 숫자로 변환했었다

처음에는 "10:55"와 같은 시간을 1055라는 숫자로 바꿨었다.

const t1 = s1 + s2;
const t2 = e1 + e2;

이 방법은 단순히 시간의 앞뒤를 비교할 때는 문제가 없어 보였었다.

1055 < 1100

실제로 10:55는 11:00보다 빠르므로 비교 결과도 올바르게 나온다.

하지만 이 문제에서는 퇴실 시간에 청소 시간 10분을 더해야 했었다. 10:55를 1055로 만든 뒤 10을 더하면 1065가 된다.

그러나 실제 시간에서 10:55 + 10분은 10:65가 아니라 11:05이다. 시간은 60분이 지나면 한 시간이 올라가기 때문에 HHMM 형태의 숫자에는 분을 직접 더할 수 없었다.

예를 들어 기존 예약이 10:00 ~ 10:55이고 새로운 예약이 11:00 ~ 12:00이라고 생각해 볼 수 있다.

기존 예약은 10:55에 끝나지만 청소는 11:05에 끝나므로, 11:00에 시작하는 예약은 같은 방에 들어갈 수 없다.

하지만 기존 코드에서는 다음과 같이 판단했었다.

1055 + 10 <= 1100
1065 <= 1100 // true

이 때문에 아직 청소가 끝나지 않았는데도 같은 객실을 사용할 수 있다고 판단했었다.

시간 계산이 필요한 문제에서는 시간을 다음과 같이 전체 분으로 바꿔야 했었다.

const time = Number(hour) * 60 + Number(minute);

10:55는 655, 11:00은 660이 된다.

655 + 10 <= 660
665 <= 660 // false