#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 100
//1419번, 배열 채우기 III, 시계방향 달팽이모양으로 채우기. 방향을 0, 1, 2, 3으로 하고, 방향을 바꾸는걸 함수로 넣어놓고 (0->1, 3->0), 100100을 0으로 초기화, 처음 입력받은 사각형대로 1으로 초기화한다음에, 만약 방향대로의 다음 칸이 0이면 방향을 바꾸는 걸로 하자. 재귀함수면 될거같다.
void snail(int (*a)[SIZE], int *dir, int *num, int n, int *i, int *j);
void transparention(int *dir);
int main()
{
int a[SIZE][SIZE] = { 0 };
int num, dir, n, i, j;
scanf("%d", &n);
for (j = 0; j < n; j++)
for (i = 0; i < n; i++)
a[j][i] = 1;
for (j = 0; j < n; j++)
{
for (i = 0; i < n; i++)
printf("%d ", a[j][i]);
printf("\n");
}
a[0][0] = 5;
i = 1;
j = 0;
num = 2;
dir = 0;
snail(a, &dir, &num, n, &i, &j);
a[0][0] = 1;
for (j = 0; j < n; j++)
{
for (i = 0; i < n; i++)
printf("%d ", a[j][i]);
printf("\n");
}
return 0;
}
void snail(int (*a)[SIZE], int *dir, int *num, int n, int *i, int *j)
{
a[*j][*i] = *num;
(*num) += 1;
if ((*dir == 0) && (a[*j][(*i + 1)] != 1) ||
(*dir == 1) && (a[(*j + 1)][*i] != 1) ||
(*dir == 2) && (a[*j][(*i - 1)] != 1) ||
(*dir == 3) && (a[(*j - 1)][*i] != 1))
transparention(dir);
switch (*dir)
{
case 0:
(*i)++;
break;
case 1:
(*j)++;
break;
case 2:
(*i)--;
break;
case 3:
(*j)--;
break;
default:
printf("switch에서 오류가낫구나n");
break;
}
if((*num )<= n*n) snail(a, dir, num, n, i, j);
}
void transparention(int *dir)
{
*dir += 1;
if (*dir == 4)
*dir = 0;
}
// 졷도 모르고 포인터로 태클걸어서 미안하다..
// * 이거 겁나 많으니까 헷갈린다
// 보고 어디다른지 확인해보길 바람
ㄴ 그게 머져 졷밥이라서 모르는..
길어서 못읽겠어요
Colorscripter