ACM 호텔
https://www.acmicpc.net/problem/10250
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 256 MB | 152603 | 52123 | 43758 | 33.160% |
문제
ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다.
고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다.
여러분은 지우를 도와 줄 프로그램을 작성하고자 한다.
즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.
문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자.
각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99).
그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고).
이런 형태의 호텔을 H × W 형태 호텔이라고 부른다.
호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다.
또 모든 인접한 두 방 사이의 거리는 같은 거리(거리 1)라고 가정하고 호텔의 정면 쪽에만 방이 있다고 가정한다.
입력
프로그램은 표준 입력에서 입력 데이터를 받는다.
프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다.
각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수,
각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W).
출력
프로그램은 표준 출력에 출력한다.
각 테스트 데이터마다 정확히 한 행을 출력하는데,
내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.
예제 입력 1
2 6 12 10 30 50 72
예제 출력 1
402 1203
예제 입력 2
3 2 20 20 1 1 1 9 9 81
예제 출력 2
210 101 909
출처
ICPC > Regionals > Asia Pacific > Korea > Nationwide Internet Competition > Daejeon Nationalwide Internet Competition 2014 A번
알고리즘 분류
N번째 사람의 방 번호는
앞 자리 번호 : N % H (0일 경우 꼭대기층 사용 H)
=> 나머지가 없다는 뜻은 최고 높이와 같은 층을 쓴다.
뒷 자리 번호 : N / H (나머지가 있을 경우 + 1)
=> N % H의 나머지가 있다면 최고층을 넘었다는 뜻이므로 호수 + 1
W는 왜 준거지????
통과된 코드
#include <iostream> #include <list> using namespace std; // T : 테스트 케이스의 수, H : 호텔의 층 수(높이), // W : 각 층의 방 수(너비), N : 몇 번째 손님 int T, H, W, N, temp, temp2; list<int> myList; int main() { cin >> T; while (T-- > 0) { cin >> H >> W >> N; temp = N % H; // 21번쨰 % 4층 = 1층을 사용 // // 나머지가 없다는 뜻은 최고 높이와 같은 층을 쓴다. if (temp == 0) { temp = H; temp2 = (N / H); } else { // 나머지가 있다면 최고층을 넘었다는 뜻이므로 호수 + 1 temp2 = (N / H) + 1; } myList.push_back((temp * 100) + temp2); // 층수 * 100 + 호수 } for (auto it = myList.begin(); it != myList.end(); it++) { cout << *it << "\n"; } return 0; }