[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값을 경우에 맞게 증가/감소 시켜서 값을 넣어준다.

 

드디어 카피 안하고 생으로 달팽이코드를 짤 수 있게 되었다.

물론 위 코드가 효율적이고 전문적이지 않다.

그래도 성장한거니까...