본문 바로가기
PS 문제 풀이/Jungol

[Jungol] 정올 1641 숫자삼각형

by 까망 하르방 2021. 3. 17.
반응형

출처: http://www.hancom.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=914&sca=2020

Approach

① 홀수번째 줄은 윗줄에서 +1 처리 후, 값을 증가시키며 출력(해당 줄을 출력 후 마지막에는 감소시킵니다.)

    짝수번째 줄은 해당 i번째 줄의 전체 개수(= i)개를 시작으로 감소시키면서 출력

② 숫자 앞쪽에 공백 출력에 유의 

    첫번째 줄에 출력되는 0의 개수는 2 * N - 1이며, 그 다음 줄부터는 -2씩 감소됩니다.

③ 각 줄마다 [1, end]까지 숫자를 출력하며, end의 범위를 조정합니다.

    N / 2 +1 줄까지는 각 줄에 출력되는 개수가 증가하다가 그 이후부터는 다시 감소합니다.

 


#include <stdio.h>
 
int N, M;
int main() {
    // freopen("input.txt", "r", stdin);
    scanf("%d %d", &N, &M);
    if (N <= 0 || N > 100 || M <= 0 || M > 3 || N % 2 == 0) {
        printf("INPUT ERROR!\n");
        return 0;
    }
    if (M == 1) {
        int num = 0, temp;
        for (int i = 1; i <= N; ++i) {
            if (i % 2 == 0) {
                num = num + i;
                temp = num;
                for (int j = 1; j <= i; ++j) {
                    printf("%d ", temp--);
                }
            }
            else {
                num = num + 1;
                for (int j = 1; j <= i; ++j) {
                    printf("%d ", num++);
                }
                // 마지막에는 한번 감소
                num--;
            }
            printf("\n");
        }
    }
    else if (M == 2) {
        int num = 0, cnt = 2 * N - 1;
        for (int i = 1; i <= N; ++i) {
            for (int j = 1; j < 2 * i - 1; ++j) {
                printf(" ");
            }
            for (int j = 1; j <= cnt; ++j) {
                printf("%d ", num);
            }
            num++, cnt -= 2;
            printf("\n");
        }
    }
    else if (M == 3) {
        int end = 1;
        for (int i = 1; i <= N; ++i) {
            int num = 1;
            for (int j = 1; j <= end; ++j) {
                printf("%d ", num++);
            }
            if (i < N / 2 + 1) end++;
            else end--;
            printf("\n");
        }
 
    }
}

 

반응형

댓글