백준 10250번 규칙찾기/ACM 호텔

2019. 1. 16. 14:55Programming/Algorithm

반응형

문제: ACM 호텔

다음과 같은 순서로 방 번호가 배정됨을 알 수 있다.

601 602 603
501 502 503
401 402 403
301 302 303
201 202 203
101 102 103

여기서 방번호를 YXX라고 뒀을 때, Y값은 N%H임을 알 수 있다. (단, N%H이 0일때 Y값은 H이다.) Y값을 구했으니 X값의 규칙성을 찾으면 된다.
위에 주어진 테이블에서 다음과 같은 규칙성이 있음을 알 수 있다.

  • XX=1일 때, N의 범위는 1~H이다.
  • XX=2일 때, N의 범위는 H+1~2H이다.
  • XX=3일 때, N의 범위는 2H+1~3H이다.
  • XX=4일 때, N의 범위는 3H+1~4H이다.
  • XX=k일 때, N의 범위는 (k-1)H+1~kH이다.

따라서 (k-1)H+1 <= n <=kH를 만족하는 k값을 찾으면, x값을 구할 수 있다. 전체 내용을 정리하면 다음과 같다.

h, w, n이 주어졌을 때

  • y는 n%h이다. 단, n%h==0이면 n=h이다.
  • (k-1)h+1<=n<=kh를 만족하는 k값을 찾는다.
  • y, x값을 양식에 맞게 출력한다.

이를 코드로 작성하면 다음과 같다.

#include <stdio.h>

int main()
{
    int input_count = 0;
    int width, height, n = 0;
    int index=0;
    int y=0, x=0, k=1;

    scanf("%d", &input_count);

    for(index=0; index<input_count; index++) {
        width=0, height=0, n=0, x=0, y=0, k=1;

        scanf("%d %d %d", &height, &width, &n);

        y = (n%height);
        if(y==0) {
            y=height;
        }


        while(!(((k-1)*height+1) <= n && n <= (k*height))) {
            k++;
        }

        x = k;

        printf("%d%02d\n", y, x);
    }

    return 0;
}

계속해서 규칙찾기 항목의 문제만 풀다보니 시간이 좀 줄어들긴 했다. 아직 한시간씩 걸리기 때문에, 문제에 좀 더 익숙해져야 할 필요가 있어보인다.

반응형