[C언어] 백준 10250 : ACM 호텔

mainsain·2022년 3월 14일
0

백준

목록 보기
6/64

문제는 간단하다. 그림처럼 층 수가 6층이고, 각 층의 방 수가 12개일 경우,
101, 201, 301 ~ 601, 102, 202, ~ 602...왼쪽부터 위로 올라가면서 채우면 된다.

이 문제를 보고 생각한 논리는 먼저

  • n % t를 하면 몇층인지 나오겠구나
  • n / h + 1 을 하면 호수가 나오겠구나

두가지였다.
그거를 바탕으로 코드를 짰다.

하지만 문제가 계속 생겼는데, h == n일 경우 위의 식이 통하지 않았다.
예를 들어 12 6 12일 경우에 1201호가 나와야 하지만, 그러지 않았기에 분류를 해주었다.

계속해서 문제가 생겼는데, h < n이면 n % h 로 층수가 나와야 하지만, n % h == 0일 경우에 또 문제가 생긴다. 따라서 분류 속 분류를 해주었다.

계속 이런식으로 하나가 잡히면 하나가 망가져서 코드가 길어졌다.

내가 푼 풀이

#include <stdio.h>

int main()
{
    int i;
    int result;
    int t,h,w,n;
    scanf("%d", &t);
    i = 0;
    while (i < t)
    {
        scanf("%d %d %d", &h, &w, &n);
        if(h == n)
        {
            result = h * 100 + 1;
            printf("%d\n", result);
        }
        else if(h < n)
        {
            if (n % h == 0)
            {
                result = h * 100 + n / h;
                printf("%d\n", result);
            }
            else
            {
                result = n % h * 100 + n / h + 1;
                printf("%d\n", result);
            }
        }
        else
        {
            result = n * 100 + n / h + 1;
            printf("%d\n", result);
        }
        i++;
    }
}

다른 사람 코드

#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;
}

출처: https://travelerfootprint.tistory.com/40 [나그네의 발자취]

논리는 같다. 나도 이 분 같이 n / h 와 n % h를 생각했다.
지금 내 코드를 다시 보니 케이스를 분류했지만, 중복되는 내용이 있다. 따라서 더 간결하게 할 수 있었다.
너무 문제를 푸는데에만 급급한 것 같다. 푸는 건 좋은데, 끝나고 한번 짧게 정리를 할 수 있는지 생각하는 시간을 가져보자.

profile
새로운 자극을 주세요.

0개의 댓글

관련 채용 정보