백준 2775번 규칙찾기/부녀회장이 될테야

2019. 1. 17. 16:25Programming/Algorithm

반응형

문제: 부녀회장이 될테야

질문글에서 다른사람들의 공식을 보고 풀었다. ㅠㅡㅜ) 데이터를 미리 만들어놔도 된다는 생각을 하지 못했던게 가장 큰 문제.

다음과 같은 방법으로 채워짐을 알 수 있다.

K층 (k-1층의 n호실)+(k층의 n-1호실)
2층 01 04 10 20 35 56 84 120 165 220
1층 01 03 06 10 15 21 28 36 45 55
0층 01 02 03 04 05 06 07 08 09 10

이를 입력값의 범위는 1<=k<=14, 1<=n<=14이지만, 0층이 존재하므로 층의 갯수는 총 15개가 된다. 따라서 아파트 전체의 결과값을 계산하기 위해서는, 15*14사이즈의 배열에 초기화해주면 된다. 이후 배열이 초기화된 이후, k값과 n값을 입력받으면 k열의 n-1행을 출력하면 된다.

코드로 구현한 내용은 다음과 같다.

#include <stdio.h>

#define max_k 15
#define max_n 14

int main()
{
    int array_apart[max_k][max_n] = {0, };
    int index_n=0, index_k=0;
    int count_testcase = 0;
    int input_n=0, input_k=0;

    for(index_k=0; index_k<max_k; index_k++) {
        for(index_n=0; index_n<max_n; index_n++) {
            if (index_n == 0) {
                array_apart[index_k][index_n] = 1;
            } else if(index_k == 0) {
                array_apart[index_k][index_n] = (index_n+1);
            // } else if(index_k == 1) {
            //     array_apart[index_k][index_n] = ((index_n+1)*(index_n+2))/2;
            } else {
                array_apart[index_k][index_n] = array_apart[index_k-1][index_n]+array_apart[index_k][index_n-1];
            }
        }
    }

    scanf("%d", &count_testcase);

    while(count_testcase>0) {
        input_n=0, input_k=0;

        scanf("%d", &input_k);
        scanf("%d", &input_n);

        printf("%d\n", array_apart[input_k][input_n-1]);

        count_testcase--;
    }

    return 0;
}

처음에는 배열에 값을 미리 계산해놓는다는 생각을 못해서, 질문글을 찾아봤다. 한번 풀어봤으니까 비슷한 유형의 문제가 나오면, 미리 계산해놓으면 되겠다는 생각이 바로 떠오…르겠지…?

반응형