(구) solved ac class 문제들/class 1

[class 1]백준 ACM 호텔(10250번) 풀이 (C++/Python)

isekaipudding 2026. 4. 19. 11:30

문제 : ACM 호텔(10250번)(Bronze III)

문제 링크 : https://www.acmicpc.net/problem/10250
출처 : Baekjoon Online Judge

 

 

이 문제를 풀려면 직접 그려서 확인해봐야 합니다.

  H O T E L  
501 502 503 504 505 ...
401 402 403 404 405 ...
301 302 303 304 305 ...
201 202 203 204 205 ...
101 102 103 104 105 ...

이렇게 되어 있습니다.

자, 여기서 문제에 나온 규칙들을 확인하겠습니다.

1. 엘리베이터 타는 거리는 고려하지 않는다.

2. 같은 거리이면 되도록 가장 아래의 층을 선호한다.

위 규칙들을 반영하여 H = 5일 때 1번부터 25번부터 배치하면 다음과 같습니다.

  H O T E L  
5 10 15 20 25 ...
4 9 14 19 24 ...
3 8 13 18 23 ...
2 7 12 17 22 ...
1 6 11 16 21 ...

이렇게 배치할 수 있습니다.

참 쉽죠?

 

자, 이제 H = 6일 때 어떻게 나오는지 확인해보겠습니다.

  1호 2호 3호 4호 5호  
6층 6 12 18 24 30 ...
5층 5 11 17 23 29 ...
4층 4 10 16 22 28 ...
3층 3 9 15 21 27 ...
2층 2 8 14 20 26 ...
1층 1 7 13 19 25 ...

문제에 나온 예시 입력 H, W, N = 6, 12, 10에서 높이가 6이고 너비가 12인 경우 10번째 손님은 402호에 머무는 것을 확인할 수 있습니다.

 

그러면 이것을 어떻게 구현해야 할까요?

우선 1-based index이므로 컴퓨터가 연산할 수 있도록 0-based index로 변환합니다.

이 때 N도 각각 -1을 합니다.

  0호 1호 2호 3호 4호  
5층 5 11 17 23 29  
4층 4 10 16 22 28  
3층 3 9 15 21 27  
2층 2 8 14 20 26  
1층 1 7 13 19 25  
0층 0 6 12 18 24  

규칙이 보이시나요?

층(floor)은 N-1 기준으로 H로 나눈 나머지이고, 호(room)는 N-1 기준으로 H로 나눈 몫이 나옵니다.

예시로 N = 10 볼까요?

그러면 N-1 = 9이며 H = 6이라고 가정하면 9 % 6 = 3, 9 / 6 = 1이 됩니다.

이것은 0-based index 기준으로 3층, 1호라는 뜻이고 1-based index로 바꾸면 4층, 2호가 되며 이것은 402호로 나오게 됩니다.

 

1-based index -> 0-based index로 변환할 때 N -> N-1이 되고 나머지 연산 및 몫 연산을 한 후 0-based index -> 1-based index로 변환할 때 연산 결과값에 각각 1씩 더합니다.

floor = (N - 1) % H + 1

room = (N - 1) / H + 1

따라서 결과값 result = 100 * floor + room이 됩니다.

 

이것을 C++ 및 Python 소스 코드로 구현합니다.

[C++]

#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;

    while(t--) {
        int h, w, n;
        cin >> h >> w >> n;

        int floor = (n - 1) % h + 1;
        int room = (n - 1) / h + 1;
        int result = 100 * floor + room;

        cout << result << '\n';
    }

    return 0;
}

[Python]

import sys

input = sys.stdin.readline

T:int = int(input().rstrip())

for _ in range(T) :
    H, W, N = map(int, input().split())
    floor:int = (N - 1) % H + 1
    room:int = (N - 1) // H + 1
    result:int = 100 * floor + room
    print(result)

 

참고로 너비(W) 변수는 이 문제에서 장식입니다.