백준 10250번 : ACM 호텔
https://www.acmicpc.net/problem/10250
1. 문제
방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다.
즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다. 손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다.
다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다.
예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다. 여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다.
첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.
2. 알고리즘
세번 째 입력 N 은 N 번 째 손님을 의미 한다.
1 번째 손님 - 101
2 번째 손님 - 201
3 번째 손님 - 301
4 번째 손님 - 401
5 번째 손님 - 501
6 번째 손님 - 601
--------------------- H 가 6 임으로 다음 칸으로 넘어간다.
7 번째 손님 - 102
8 번째 손님 - 202
9 번째 손님 - 302
10 번째 손님 - 403
호수 계산 - 10-1(도착한 손님) % 호텔의 높이(H) + 1
층수 계산 - 10-1(도착한 손님) / 호텔의 높이(H) + 1
3. 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <iostream> #include <sstream> #include <string> #include <algorithm> #include <functional> #include <vector> #include <list> #include <queue> #include <map> #include <set> #include <stack> using namespace std; int main() { std::ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; while(n--) { int a, b, c; cin >> a >> b >> c; c--; printf("%d%02d\n", c%a+1, c/a+1); } return 0; } | cs |