본문 바로가기

BAEKJOON/수학

백준 10250번 [ACM 호텔](C++)-yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 10250 [ACM 호텔]


문제 링크: https://www.acmicpc.net/problem/10250

문제 설명:

ACM 호텔 매니저는 손님을 방 번호로 배정해야 합니다. 호텔은 H × W 크기의 건물로 구성되어 있으며, 각 층에는 W개의 방이 있습니다. 방 번호는 아래와 같은 규칙으로 부여됩니다:

  • 각 손님은 엘리베이터에서 가장 가까운 방부터 배정됩니다.
  • 먼저, 1층의 방부터 차례로 채워지며 위층으로 올라갑니다.

손님의 대기 순번 N이 주어졌을 때, 손님이 배정받을 방 번호를 출력하는 프로그램을 작성하세요.

입력 조건:

  • 첫째 줄에 테스트 케이스의 수 T가 주어집니다.
  • 각 테스트 케이스는 H, W, N (1 ≤ H, W ≤ 99, 1 ≤ N ≤ H×W)으로 이루어져 있습니다.

출력 조건:

  • 각 테스트 케이스에 대해 N번째 손님이 배정받을 방 번호를 출력합니다.

문제 해결 코드


#include <iostream>
using namespace std;

int main() {
    int T; // 테스트 케이스 수
    cin >> T;

    while (T--) {
        int H, W, N;
        cin >> H >> W >> N; // 호텔의 높이, 너비, 대기 순번

        // 배정받을 층과 방 번호 계산
        int floor = (N % H == 0) ? H : N % H; // 층 수
        int room = (N - 1) / H + 1;           // 방 번호

        // 방 번호 출력
        cout << floor * 100 + room << endl; // 방 번호는 층*100 + 방
    }

    return 0; // 프로그램 정상 종료
}

코드 설명

위 코드는 손님의 대기 순번에 따라 적절한 방 번호를 계산하여 출력합니다.

  • 층 계산:
    • `N % H`를 사용하여 손님이 배정받을 층을 계산합니다.
    • 나머지가 0인 경우, 손님은 꼭대기 층 H에 배정됩니다.
  • 방 번호 계산:
    • `(N - 1) / H + 1`을 사용하여 방 번호를 계산합니다.
    • 이는 손님이 몇 번째 방에 위치하는지를 나타냅니다.
  • 결과 출력: 방 번호는 `층 * 100 + 방 번호` 형식으로 출력됩니다.

시간 복잡도 분석:

  • 각 테스트 케이스는 상수 시간 복잡도로 처리됩니다.
  • 따라서 전체 시간 복잡도는 O(T)입니다.

결과

다음은 입력 예시와 출력 결과입니다:

입력:
2
6 12 10
30 50 72

출력:
402
1203

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST