사용자 도구

사이트 도구


jungol:problem_1495

문제 번호: 1495

링크 : 대각선 지그재그 http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=767&sca=20

#include <stdio.h>
 
#define ARR_MAX 102
 
void init_array(int (*pArray)[ARR_MAX], int len);
void fill_array(int (*pArray)[ARR_MAX], int len);
void print_array(int (*pArray)[ARR_MAX], int len);
 
int main(int argc, char* argv[]) {
 
    int data[ARR_MAX][ARR_MAX] = {{0, }};
    int n = 0;
 
    scanf("%d", &n);
    init_array(data, n);
    fill_array(data, n);
    print_array(data, n);
 
    printf("argc: %d, argv: %s\n", argc, argv[0]);
    return 0;
}
 
void print_array(int (*pArray)[ARR_MAX], int len) {
    int i = 1;
    int j = 1;
 
    int boundari = len + 1;
 
    for (i = 1; i < boundari; i++) {
        for (j = 1; j < boundari; j++) {
            printf("%d ", pArray[i][j]);
        }
        printf("\n");
    }
}
 
void fill_array(int (*pArray)[ARR_MAX], int len) {
 
    int number = 1;
    int x = 1;
    int y = 1;
    int end_of_number = len * len;
 
    pArray[y][x] = 1;
 
    if (len == 1) {
        return;
    }
 
    while (number < end_of_number) {
        // step 1
        if (pArray[y + 1][x] > -1) {
            y = y + 1;
        } else if (pArray[y][x + 1] > -1) {
            x = x + 1;
        }
        number++;
        pArray[y][x] = number;
 
        // step 2
        for ( ;pArray[y-1][x+1] > -1; ) {
            number++;
            y = y - 1;
            x = x + 1;
            pArray[y][x] = number;
        }
 
        // step 3
        if (pArray[y][x + 1] > -1) {
            x = x + 1;
        } else if (pArray[y+1][x] > -1) {
            y = y + 1;
        }
        number++;
        pArray[y][x] = number;
 
        // step 4
        for ( ;pArray[y+1][x-1] > -1; ) {
            number++;
            y = y + 1;
            x = x - 1;
            pArray[y][x] = number;
        }
    }
}
 
void init_array(int (*pArray)[ARR_MAX], int len) {
 
    int i = 0;
    int j = 0;
 
    int boundari = len + 2;
 
    for (i = 0; i < boundari; i++) {
        for (j = 0; j < boundari; j++) {
            pArray[i][j] = 0;
        }
    }
 
    // set boundari
    for (i = 0; i < boundari; i++) {
        pArray[0][i] = -1;
        pArray[boundari - 1][i] = -1;
 
        pArray[i][0] = - 1;
        pArray[i][boundari - 1] = -1;
    }
}

문제로 주어진 규칙 속에서 4 방향에 대한 이동 가능한 규칙을 찾아 배열에 값을 채우도록 함.

이동 가능한 방향에 대한 결정을 돕기 위해 배열의 경계 부분은 -1 값으로 채웠고, 반복문 및, 조건문 체크시 -1 이 아닌 경우, 규칙에 맞는 숫자 값을 채우도록 하였음.

jungol/problem_1495.txt · 마지막으로 수정됨: 2016/06/12 22:45 저자 lindol