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