> ACM 호텔 > Bronze III > #[[구현]] #[[수학]] #[[사칙연산]] ### 문제 요약 호텔에서 손님이 오는 순서대로 방을 배정하는데, 각 층별로 1호실 앞에 있는 엘리베이터 문으로부터 걷는 거리가 짧은 방을 먼저 배정합니다. 단, 거리가 같은 경우에는 층수가 낮은 방을 먼저 배정합니다. 즉 12층짜리 호텔이라면 101, 201, …, 1201호를 먼저 온 12명에게 다 배정하고 13번째 손님에게 102호를 배정하게 됩니다. 호텔의 층수 H, 호수 W가 주어졌을 때 N번째 손님에게 배정되어야 하는 방 번호를 구해야 합니다. ### 해설 N번째 손님에게 배정되는 방의 층수와 호수를 독립적으로 계산할 수 있습니다. 문제의 조건에 따라 i층 j호실은 `(j - 1) * H + i`번째 손님에게 배정되고, i는 항상 H보다 작거나 같은 정수이므로, `N - 1 = (j - 1) * H + (i - 1)`에서 i - 1이 N - 1을 H로 나눈 나머지이며 j - 1은 N - 1을 H로 나눈 몫임을 알 수 있습니다. 따라서 다음의 공식을 구현하는 것으로 문제의 답을 얻습니다. 층수: `(N - 1) % H + 1` 호수: `(N - 1) / H + 1` ### 배울 점 선형적인 순서를 2차원 좌표에 매핑하는 일반적인 구현 문제지만, 0-based(N - 1을 기준으로 했을 때)와 1-based(N을 기준으로 했을 때)의 차이를 이해하고 둘 사이를 변환할 수 있어야 문제의 본질을 잘 이해하고 푼 것이라고 할 수도 있겠습니다.