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