본문 바로가기
개인 공부/코딩테스트

[C++] 백준 10250번 ACM 호텔 :: seoftware

by seowit 2020. 3. 13.

문제

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

 

10250번: ACM 호텔

문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정

www.acmicpc.net

소스코드

#include <iostream>
using namespace std;

int main(void) {
	int T;
	cin >> T;
	for (int t = 0; t < T; t++) {
		int H, W, N; 
		cin >> H >> W >> N;

		int num = (N-1) / H;
		int floor = N - num * H;

		int me = 1 + num + 100 * floor;

		cout << me << endl;
	}
}

코드설명

0. 문제를 파악해보면 101, 201, ... , h01, 102, 202, ..., h02, 103, 203, ..., h03, ..., hw 가 배정 순서임을 파악할 수 있다. (=1호부터 1층부터 꼭대기까지 채워지고, 다음은 102호부터 꼭대기층의 2호까지 채워지고, 마지막에는 1층의 w호부터 꼭대기층의 w호까지 채워진다.)

1. num은 XX이다. 앞에 몇 개의 호가 채워졌는지 알아보려면 N을 H로 나눈 몫을 보면 된다. 그러나 만약 6층까지 있는 건물에 6번째 손님이 들어오는 경우(=N/H가 나누어 떨어지는 경우)를 고려하여 num을 (N-1)/H 로 계산하였다. 

2. floor는 YY 또는 Y이다. N에서 num*H를 빼주면 floor를 구할 수 있다.

3. me는 N번째 손님이 부여받는 방 번호이다. 방 호수는 1부터 시작하므로 num+1 에다가 100*floor를 더해준다.

댓글