문제 URL:
10250번: ACM 호텔
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수
www.acmicpc.net
다음 문제는 N 번째 손님에게 배정되어야 하는 방 번호를 출력하는 프로그램으로 2차원 배열을 이용하여 풀이했다.
H × W 형태 호텔
H: 행(맨 아래부터 1행으로 지정)
W: 열(맨 왼쪽부터 1열으로 지정)
n: 손님 번호
Y: 층 수
X: 엘리베이터에서부터 세었을 때의 번호
(방 번호는 YXX 나 YYXX 형태)
풀이과정은 아래와 같다.
- 손님들은 하나의 열부터 차례대로 채워짐.→ n을 H(총 행의 개수)로 나눈 몫과 나머지를 이용.
- 손님이 가득 찬 열의 개수는 n/H
따라서 n번째 손님은 n/H+1 열에 들어가게 됨.→ X = n/H+1 - 손님이 들어갈 층은 n을 H로 나눈 나머지
따라서 n%H 행에 들어가게 됨.→ Y = n%H - 주의할 점! 만약 손님이 한 열의 가장 마지막 즉, 가장 마지막 행에 들어가야 한다면
X = n/h(1을 더해주지 않음), Y = h이 된다. - 주의할 점! 만약 X가 10미만이라면 Y와 X 사이에 0을 함께 출력한다.
#include<iostream>
using namespace std;
int main()
{
int t, h, w, n;
cin >> t;
for(int i=0; i<t; i++)
{
cin >> h >> w >> n;
int x=n/h+1;
int y=n%h;
if(y==0)
{
x=n/h;
y=h;
}
if(x/10==0)
cout << y << "0" << x << "\n";
else
cout << y << x << "\n";
}
}