특정 규칙에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산한다.
#include <iostream>
using namespace std;
int main()
{
int cases; // 케이스
cin>>cases;
for(int i=0;i<cases;i++)
{
int num[3]; // 호텔의 층 수, 각 층의 방 수, 몇 번째 손님
for(int j=0;j<3;j++)
{
cin >> num[j];
}
int a=num[2]%num[0]; // 배치할 층
int b=num[2]/num[0]+1; // 배치할 방, 방이 1부터 시작하므로 1을 더해줌
if(a==0) // 손님의 방이 호텔 층 수의 배수라면
{
a=num[0];
b-=1;
}
if(b>=10) // 방이 10개가 넘어간다면
{
cout<<a<<b<<"\n";
}
else // 중간에 0을 넣어야 함
{
cout<<a<<"0"<<b<<"\n";
}
}
}
문제의 규칙에 따라, 손님이 올 때마다 엘리베이터로부터 가까운 방부터 배정해 층수를 늘려나가야 한다. 예를 들어, 위의 그림과 같은 호텔이 있을 때, 손님이 10명이 온다고 가정하면
1번째 손님 | 2번째 손님 | 3번째 손님 | 4번째 손님 | 5번째 손님 | 6번째 손님 | 7번째 손님 | 8번째 손님 | 9번째 손님 | 10번째 손님 |
---|---|---|---|---|---|---|---|---|---|
101호 | 201호 | 301호 | 401호 | 501호 | 601호 | 102호 | 202호 | 302호 | 402호 |
이렇게 배치하게 된다.
손님의 번호를 보고 몇 번째 층의 몇 번째 방인지를 알아내고, 거기에 따라 몇 호에 묵을지를 출력한다.
몇 번째 방인지를 구할 때, 방의 수가 10 이하인지 확인해야 한다. "몇 층의 몇 번째 방" 방식에서 "몇 번째 방"의 수가 10 이하라면, 앞에 0을 붙여야 정상적으로 출력할 수 있다.