본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 10250번: ACM 호텔 C언어

문제 출처 : https://www.acmicpc.net/problem/10250

 

10250번: ACM 호텔

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

www.acmicpc.net

1. 코드

#include <stdio.h>

int main(void)
{
    int t, h, w, n, i;
    
    scanf("%d", &t);
    
    for(i = 0; i < t; i++)
    {
        scanf("%d %d %d", &h, &w, &n);
        if(n % h == 0) printf("%d%02d\n", h, n / h);
        else printf("%d%02d\n", n % h, n / h + 1);
    }
    return 0;
}

 

2. 문제 해결 방식

이 문제는 문제 설명이 많이 길어서 문제를 이해하는 게 관건인 것 같다. 문제를 정리하면 엘리베이터에서 제일 가까운 방으로 사람들을 채우는데 N번째 사람은 몇 호실인지 알려주는 프로그램이다.

문제를 보면 아래층을 선호한다고 하고 엘리베이터랑 제일 가까워야 한다. 그렇다면 이러한 표가 완성이 될 것이다.

순서 순서
104호 4 204호 8
103호 3 203호 7
102호 2 202호 6
101호 1 201호 5

1부터 8까지 순차적으로 사람들이 각 호실을 차지하는 것이다. 문제를 이해했다면 반은 성공했다. 이제는 규칙을 파악하면 이 문제를 해결할 수 있다.

예제를 보면 6 12 10의 결과는 402로 나온다 그렇다면 0을 기준으로 수를 나눈다면 4와 2가 나온다. 10 % 6 = 4가 나온다. n % h이라는 식이 도출된다. 그리고 10 / 6 = 1이므로 여기서 1을 더한다면 2가 나오기 때문에 n / h + 1이라는 식이 나온다.

하지만 여기서 끝이 아니다. 만약 6 12 12와 같은 경우에는 12 % 6 = 0, 12 / 6 + 1 = 3이다. 그렇다면 003이라는 호수가 나오는데 이러한 호수는 존재하지 않기 때문에 n % h의 값이 0일 때는 수식을 조금 바꿔서 n % h ->h, n / h + 1 -> n /h로 수정한다. 그렇다면 답이 나오는지 확인해보자

h = 6, 12 / 6 = 2 이므로 602가 나온다. 그렇다면 정답도 확인했으니 이것을 이제 코드로 짜면 된다. 그런데 주의해야 할 점은 %d0%d로 출력하면 틀린다고 나와서 %d%02d로 출력을 해야 한다. 아마도 이건 추측인데 숫자만 맞게 인식을 시킨 것 같다.

 

3. 느낀 점

문제 설명에 비해 속 내용은 엄청나게 간단했다. 그래서 편안한 마음으로 편하게 풀었다. 이 문제는 압도적인 글자 수에 당황하지 않으면 될 것 같다.