#include <stdio.h>


int snail_column(int(*snail)[100], int num, int cnt, int cnt2, int cnt3); // 가로 배열

int snail_row(int(*snail)[100], int num, int cnt, int cnt2, int cnt3); //세로 배열

int abs_f(int a, int b); // 절대값 구하기



int check = 0; // 가로 배열 증감을 위한 초기값

int check2 = 0; // 세로 배열 증감을 위한 초기값

int check_flag = 0; // 초기 변수를 어떻게 선언할지 판단하는 변수


int main(void)

{

int c, num, cnt;

int i, y; // 출력을 위한 이중반복문 변수

int snail[100][100];

printf("숫자를 입력하세요: ");

scanf("%d", &c);


int std = 0;

int std2 = 0;

int std3 = 0;

num = 1;



cnt = 0;

for (cnt = 0; cnt < c; cnt++)

{


if (check_flag == 0) // 증가를 위한 변수선언

{

std = check;

std2 = c - check;

std3 = 1;

check2++;


}

else //감소를 위한 변수선언

{

std = c - check2;

std2 = check2 - 1;

std3 = 0;

check++;

}

num = snail_column(snail, num, std, std2, std3);

num = snail_row(snail, num, std, std2, std3);

}






for (i = 0; i < c; i++)// 출력을 위한 이중반복문

{

for (y = 0; y < c; y++)

{

printf("%d ", snail[i][y]);

}

printf(" ");

}


}



int snail_column(int(*snail)[100], int num, int cnt, int cnt2, int cnt3)

{

int i = cnt;

int abs = 0;


while (i != cnt2)

{

abs = abs_f(i, check_flag);

snail[cnt][abs] = num;

if (check_flag == 0)

i++;

else

i--;


num++;

}



if (check_flag == 0)

check_flag = -1;

else

check_flag = 1;


return num;

}

int snail_row(int(*snail)[100], int num, int cnt, int cnt2, int cnt3)

{

int i = abs_f(cnt, check_flag);

int abs2 = abs_f(cnt2, cnt3);

while (i != cnt2)

{


snail[i][abs2] = num;

if (check_flag == -1)

i++;

else

i--;


num++;


}

if (check_flag == -1)

check_flag = 1;

else

check_flag = 0;


return num;


}



int abs_f(int a, int b)

{

int c = a - b;


if (c > 0)

c = c;

if (c<0)

c = c*(-1);


return c;

}




나는 애초에 공부랑은 담을 쌓는 스킬 유전자를 가진 인간임 ㅋㅋ 근데 처음 C란걸 공부했을때 위에 있는 코드를 짜면서 좌절이란걸 경험함.


위에 코드가 뭐냐면 개 성우형 436쪽에 있는 달팽이배열 코드 ㅋㅋㅋ 


꼴에 답지 안보고 하겠다고 일주일을 고민해서 만든 코드였었음 ㅋㅋㅋ


그렇게 만들고 나니 괜히 뿌듯해하면서 성우형이 짠 모범답안을 봤는데 진짜 원피스 1화에 나오는 코비가 2년후 루피한테 개쳐맞는 느낌이었다.ㅋㅋ


그때 느끼고 생각했다.


'알고리즘을 공부하자라고 그리고 오래가는 장작이 되자!!'고 다짐하게되었지 ㅋㅋㅋ