[c]
[C] 달팽이 코드
Gernii K
2024. 1. 4. 11:13
N x N 배열에 숫자가 회전하며 1씩 증가하는 코드
N 이 3이라면
1 2 3
8 9 4
7 6 5 이런식으로 나선형으로 숫자가 커짐
int main(void)
{
int i, j;
int arr[100][100];
int direction = 0;
int value = 0;
int num;
int timer;
printf("정수 입력 : ");
scanf("%d", &num);
for (i = 0; i < 100; i++) // 배열을 -1로 초기화
{
for (j = 0; j < 100; j++)
{
arr[i][j] = -1;
}
}
for (i = 1; i <= num; i++) // 배열을 num x num 만큼 0으로 초기화
{
for (j = 1; j <= num; j++)
{
arr[i][j] = 0;
}
}
timer = num * num;
i = 1;
j = 1;
value = 1;
while (timer)
{
if (arr[i][j] == 0)
{
switch (direction)
{
case 0:
arr[i][j++] = value++;
break;
case 1:
arr[i++][j] = value++;
break;
case 2:
arr[i][j--] = value++;
break;
case 3:
arr[i--][j] = value++;
break;
default:
printf("error\n");
return 0;
break;
}
}
else
{
switch (direction)
{
case 0:
j--;
i++;
break;
case 1:
i--;
j--;
break;
case 2:
j++;
i--;
break;
case 3:
i++;
j++;
break;
default:;
}
direction++;
direction %= 4;
timer++;
}
timer--;
}
for(i = 1; i<=num; i++)
{
for(j = 1; j<=num; j++)
{
printf("%3d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
임의로 배열사이즈를 100x100으로 설정하고,
모든 요소를 -1로 초기화
num값을 입력받아 num x num 배열로 구성
(1,1)부터 num x num 만큼을 0으로 초기화
배열의 값이 0 일때 value 값을 넣어주고 증가시킴
이동은 4가지, 가로 ++ / 세로 ++ / 가로 -- / 세로 -- , 순서로 이동
총 num x num 만큼만 돌면 되서 timer를 그렇게 세팅하고 while (timer)
i와 j값을 경우에 맞게 증가/감소 시켜서 값을 넣어준다.
드디어 카피 안하고 생으로 달팽이코드를 짤 수 있게 되었다.
물론 위 코드가 효율적이고 전문적이지 않다.
그래도 성장한거니까...