사용자 도구

사이트 도구


jungol:problem_1331

문제: 정올 - 문자마름모 1331

#include <stdio.h>
 
#define ARRAY_MAX 200
 
void fill_blank(char (*temp)[ARRAY_MAX]) {
    int i = 0;
    int j = 0;
    for (i = 0; i < ARRAY_MAX; i++) {
        for (j = 0; j < ARRAY_MAX; j++) {
            temp[i][j] = ' ';
        }
    }
}
 
int main(int argc, char* argv[]) {
 
    char data[ARRAY_MAX][ARRAY_MAX] = {{'\0'}, };
    int n = 0;
    int x = 0;
    int y = 0;
    char v = 'A';
    int dm = 0;
    int i = 0;
    int len = 0;
 
    fill_blank(data);
 
    scanf("%d", &n);
 
    x = n;
    y = -1;
 
    dm = n;
 
    while (dm > 0) {
        for (i = 0; i < dm; i++) {
            x = x - 1;
            y = y + 1;
            data[y][x] = v++;
            if (v > 'Z') {
                v = 'A';
            }
        }
        dm = dm - 1;
        for (i = 0; i < dm; i++) {
            x = x + 1;
            y = y + 1;
            data[y][x] = v++;
            if (v > 'Z') {
                v = 'A';
            }
        }
 
        for (i = 0; i < dm; i++) {
            x = x + 1;
            y = y - 1;
            data[y][x] = v++;
            if (v > 'Z') {
                v = 'A';
            }
        }
 
        dm = dm - 1;
        for (i = 0; i < dm; i++) {
            x = x - 1;
            y = y - 1;
            data[y][x] = v++;
            if (v > 'Z') {
                v = 'A';
            }
        }
        if (dm >= 0) {
            y = y - 1;
            dm = dm + 1;
        }
    }
 
    len = (n * 2) - 1;
    for (y = 0; y < len; y++) {
        for (x = 0; x < len; x++) {
            printf("%c ", data[y][x]);
        }
        printf("\n");
    }
 
    //printf("argc: %d, argv: %s\n", argc, argv[0]);
    return 0;
}

각 변에 값을 채워나가야 하는 횟수를 먼저 계산하고, 이동 해야하는 횟수 별로 x, y 위치를 이동시켜가면서 문자를 채움.

각 변에 채워 나가야 하는 횟수 계산은 n이 3일 때, '3, 2, 2, 1' 과 같은 순으로 값이 계속 변하는 것을 확인하고 변을 옮길 때 이에 맞게 계산해줌.

jungol/problem_1331.txt · 마지막으로 수정됨: 2016/05/22 15:47 저자 lindol