네번째 조건이 눈길이 끌었다.
고객이 원하는 방이 이미 배정되어 있으면 원하는 방보다 번호가 크면서 비어있는 방 중 가장 번호가 작은 방을 배정합니다.
Upper_Bound가 바로 떠올랐고 HashSet을 이용하여 방문처리를 하였다.
핵심은 이미 방문한 방이 주어질때만 Upper_Bound를 수행하는 것.
next[1] = 2, next[2] = 3, next[3] = 4,
2를 방문한다면 next[2] = next[3] (next[2] = 4)
이후에 2를 재방문하게 되면 4를 조회할 수 있다.
Map<Long, Long>을 통해 containsKey가 없다면 Map.put(roomId, roomId + 1)하고 roomId를 저장
있다면 next = find(Map.get(roomId)) 수행하고 next를 저장