Computer Science/Competitive Programming

[백준] 10250 (ACM 호텔)

specidiee 2025. 11. 20. 16:50

문제 요약

호텔에서 손님이 오는 순서대로 방을 배정하는데, 각 층별로 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을 기준으로 했을 때)의 차이를 이해하고 둘 사이를 변환할 수 있어야 문제의 본질을 잘 이해하고 푼 것이라고 할 수도 있겠습니다.