본문 바로가기
Online-Judge/Baekjoon

[Baekjoon] C++ 10250번 ACM 호텔

by eungbbang 2021. 6. 15.
반응형

https://www.acmicpc.net/problem/10250

 

10250번: ACM 호텔

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수

www.acmicpc.net

 

테스트 케이스 T를 입력 받아 반복한다.

int T = 0;
cin >> T;

while (T--) {
	//테스트 케이스 반복
}

 

호텔의 높이 H와 호텔의 넓이 W, 손님 번호 N을 각각 입력 받는다.

int H, W, N = 0;	//높이, 넓이, 손님 번호
cin >> H >> W >> N;

 

이때, 각 방의 번호는 다음과 같다.

예를 들어 아래 빗금쳐져 있는 방은 층수로 3층, 왼쪽부터 5번째 있는 방이므로 305호이다.

 

호텔에서는 도착한 손님에 따라 순차적으로 방을 배정하려고 한다.

손님을 엘리베이터를 타고 이동하는 거리를 고려하지 않으며, 같은 거리라면 낮은 층수를 선호한다고 한다.

즉, 가장 왼쪽에 있는 방 중 아래부터 차곡차곡 채워나가면 된다.

 

이때 손님의 방 번호는 다음과 같은 규칙을 가지게 된다.

 

먼저, 층수의 경우 손님 번호 N 높이 H로 나눈 것의 나머지가 된다.

단, 나머지가 0일 경우 가장 높은 방 H층을 배정 받게 된다.

 

if (N % H == 0) {
	roomNumber = H;
	roomNumber *= 100;	//층수는 백의 자리
}
else {
	roomNumber = N % H;
	roomNumber *= 100;
}

 

호수의 경우 손님 번호 N높이 H로 나눈 것으로 구할 수 있다.

가장 높은 방을 배정 받는 손님의 경우에는 이,

나머지 손님의 경우 몫에 1을 더한 것이 호수이다.

 

if (N % H == 0) {
	roomNumber += (N / H);
}
else {	
	roomNumber += (N / H + 1);
}

 

계산을 완료한 뒤에는 방넘버를 출력한다.

cout << roomNumber << endl;

[전체 코드]

#include <iostream>
using namespace std;

int main() {

	int T = 0;
	cin >> T;

	while (T--) {
		int H, W, N = 0;	//높이, 넓이, 손님 번호
		cin >> H >> W >> N;

		int roomNumber = 0;

		if (N % H == 0) {
			roomNumber = H;
			roomNumber *= 100;
			roomNumber += (N / H);
		}
		else {
			roomNumber = N % H;
			roomNumber *= 100;
			roomNumber += (N / H + 1);
		}

		cout << roomNumber << endl;

	}
}
반응형

댓글