#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년후 루피한테 개쳐맞는 느낌이었다.ㅋㅋ
그때 느끼고 생각했다.
'알고리즘을 공부하자라고 그리고 오래가는 장작이 되자!!'고 다짐하게되었지 ㅋㅋㅋ
댓글 0