-
(추가) 달팽이 배열예제/Layer7_20160323 2017. 3. 28. 01:47반응형
2016 03 23 다차원 배열에서 마지막 문제인 달팽이 배열을 1년뒤에 다시 짜 보았습니다.
최대한 이해가 쉽게 주석을 많이 달아놨습니다. 혹시라도 이해가 안되시면 댓글을 남겨주세요
기본 메커니즘은 가로와 세로를 나누고, 각각 오른쪽,왼쪽/아래쪽,위쪽 으로 진행방향을 기준으로 나누었습니다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#include <stdio.h>int main(){int arr[100][100]={0,};//값을 저장할 배열int input;//입력값int i, j;//for문 돌리려고int garo_num, sero_num;//garo_num : 가로로 진행할 때 찍어야할 번호의 개수int present_garo=-1, present_sero=0;//present_garo : 현재 가로. 세로로 진행하고 있을 때 고정되어야 할 값//왜 present_garo만 -1로 초기화 했을까?//=>처음엔 무조건 가로로 오른쪽으로 진행하기 때문에 ++present_garo를 만날수밖에 없다.//=>첫 배열값을 채울때 arr[0][0]으로 채워야 하기 때문에//=>present_sero는 0으로, present_garo는 -1로 초기화 한 것이다.//present_sero : 현재 세로. 가로로 진행하고 있을 때 고정되어야 할 값int number=1;//현재 찍어야 할 수scanf("%d", &input);//입력받기garo_num=input;//맨 처음 시작 : input만큼 가로로 진행sero_num=input-1;//맨 처음 시작 : input-1만큼 세로로 진행for(i=0; i<input*2-1; ++i){/*input 이 5라고 가정했을 때5, 4, 4, 3, 3, 2, 2, 1, 1 => 9번 반복.*/if(i%2==0){//가로로 진행할 차례!if(garo_num%2==input%2){//가로에서 오른쪽으로 갈지, 왼쪽으로 갈지 결정! : 여기선 오른쪽!for(j=0; j<garo_num; ++j){//가로로 진행할 때는 세로값이 고정되어 있어야겠죠? : present_sero 고정!arr[present_sero][++present_garo]=number++;//값을 넣고 number의 값을 1씩 늘려주고 현재의 가로에 +1.}--garo_num;//다음에 가로를 채울 땐 하나 적은 개수로 채웁니다.}else{//여기선 왼쪽!for(j=0; j<garo_num; ++j){arr[present_sero][--present_garo]=number++;}--garo_num;}}else{//세로로 진행할 차례!if(sero_num%2==(input-1)%2){//세로에서 아래쪽으로 갈지, 위쪽으로 갈지 결정 : 여기선 아래쪽for(j=0; j<sero_num; ++j){//세로로 진행할 때는 세로값이 고정되어 있어야겠죠? : present_garo 고정!arr[++present_sero][present_garo]=number++;//값을 넣고 number의 값을 1씩 늘려주고 현재의 세로에 +1.}--sero_num;//다 채웠으면 마찬가지로 1씩 줄여줍시다.}else{//위쪽으로 갑시당for(j=0; j<sero_num; ++j){arr[--present_sero][present_garo]=number++;}--sero_num;}}}for(i=0; i<input; ++i){for(j=0; j<input; ++j){printf("%5d", arr[i][j]);//가독성의 편의를 위해 %5d를 택했습니다.}printf("\n");}}cs 반응형'예제 > Layer7_20160323' 카테고리의 다른 글
Layer7_20160323수업_다차원 배열 과제 (0) 2016.03.27 Layer7_20160323수업_2의2000제곱(2의 2000승) (0) 2016.03.24 Layer7_20160323수업 (0) 2016.03.24