SWEA/[D2]

[C언어] SWEA 2005 파스칼의 삼각형

ruming 2022. 3. 1. 19:05

크기가 N인 파스칼의 삼각형을 출력한다.

N은 1이상 10 이하의 정수이다.

 

파스칼의 삼각형

 

우선 배열을 두 개 잡았다. 하나는 파스칼의 삼각형을 기억하고, 하나는 기억한 삼각형에서 다음 줄을 계산한다.

그리고 첫번째 수와 마지막 수가 항상 1인 것을 계산하기 위해 맨앞과 뒤를 0으로 채웠다. if문으로 j==0, j==(i-1)일 때를 구분해줘도 된다. 

n[12]에 파스칼의 삼각형을 저장해주고, n2[10]에서 계산한다. 

n[1]에는 1이 저장되어 있다. 2번째 줄에서는 n2에서 0+1, 1+0을 계산해 1 1을 출력한다. 그럼 n2에 1 1이 저장되었으므로 n[1], n[2]에 1, 1을 저장한다. 그럼 n에는 {0, 1, 1, 0, 0 ... }(0은 초기화된 값) 이렇게 저장이 된다. 파스칼의 삼각형 두번째 줄이다.

 

3번째

n2 : n1을 이용해 계산 -> n2 = {1, 2, 1, 0, 0 ... }

n : n2에 계산된 3번째 줄을 다시 저장 -> n = {0, 1, 2, 1, 0, 0 ...}

이렇게 두 배열이 돌아가게 된다.

#include <stdio.h>
int main(void) {
    int test_case, T;
    scanf("%d", &T);
    for (test_case = 1; test_case <= T; ++test_case)
    {
        int N, n[12] = { 0 }, n2[10] = { 0 };
        scanf("%d", &N);
        printf("#%d\n", test_case);
        n[1] = 1;	//파스칼의 삼각형 첫번째
        for (int i = 1; i <= N; i++) {	//N줄을 출력해야 함
            for (int j = 0; j < i; j++) {	//각 줄은 i만큼 출력됨
                n2[j] = n[j] + n[j+1];	//n에서 현재 인덱스와 다음 인덱스를 더함
                printf("%d ", n2[j]);	//더한 값을 출력
            }
            for (int j = 0; j < i; j++) {
                n[j+1] = n2[j];	//n에 n2를 저장함
            }
            printf("\n");
        }
    }
    return 0;
}