사용자 도구

사이트 도구


jungol:problem_1707

정올 문제 풀이

문제 번호: 1707

#include <stdio.h>
 
#define SIZE_D 101
 
int main(int argc, char* argv[]) {
 
    int n = 0;
    int i = 0;
    int j = 0;
    int d = 0;
    int dx = 0;
    int dy = 0;
 
    int direction = 0;
    int data_arr[SIZE_D][SIZE_D] = {{0}, }; 
 
    scanf("%d", &n);
 
    for (j = 0; j < n; j++) {
        for (i = 0; i < n; i++) {
            if (direction == 0) {
                data_arr[dy][dx] = d + 1;
                if (dx + 1 < n && data_arr[dy][dx + 1] == 0) {
                    dx = dx + 1;
                } else {
                    direction = 1;
                    dy = dy + 1;
                }
            } else if (direction == 1) {
                data_arr[dy][dx] = d + 1;
                if (dy + 1 < n && data_arr[dy + 1][dx] == 0) {
                    dy = dy + 1;
                } else {
                    direction = 2;
                    dx = dx - 1;
                }
            } else if (direction == 2) {
                data_arr[dy][dx] = d + 1;
                if (dx - 1 > -1 && data_arr[dy][dx - 1] == 0) {
                    dx = dx - 1;
                } else {
                    direction = 3;
                    dy = dy - 1;
                }
            } else {
                data_arr[dy][dx] = d + 1;
                if (dy - 1 > -1 && data_arr[dy - 1][dx] == 0) {
                    dy = dy - 1;
                } else {
                    direction = 0;
                    dx = dx + 1;
                }
            }
            d++;
        }
    }
 
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%d ", data_arr[i][j]);
        }
        printf("\n");
    }
 
    //printf("argc=%d, argv=%s\n", argc, argv[0]);
    return 0;
}

진행 방향을 기록하는 변수를 두고 그에 맞게 한칸씩 이동하면서 값이 배열에 달팽이 모양으로 채워지도록 함. 생각보다 풀기가 어려웠던 것 같다.

jungol/problem_1707.txt · 마지막으로 수정됨: 2016/04/30 23:32 저자 lindol