배열의 응용인 달팽이 모양의 배열을 가지는 프로그램을 작성해 보겠습니다


달팽이 배열이란 아래 그림과 같이 배열이 선언된 배열을 뜻합니다


배열을 가리키는 화살 모양대로 1부터 16까지 값을 저장한


그림과 같이 출력하면 됩니다

이 숫자들을 분석하면

 

4칸 이동: y값이 1증가하는 배열   arr[x][y+1]    (0,0) (0,1) (0,2) (0,3)

3칸 이동: x값이 1증가하는 배열   arr[x+1][y]    (1,3) (2,3) (3,3)


3
칸 이동: y값이 1감소하는 배열   arr[x][y-1]    (3,2) (3,1) (3,0)

2칸 이동: x값이 1감소하는 배열   arr[x-1][y]    (2,0) (1,0)


2
칸 이동: y값이 1증가하는 배열   arr[x][y+1]    (1,1) (1,2)

1칸 이동: x값이 1증가하는 배열   arr[x+1][y]    (2,2)


1
칸 이동: y값이 1감소하는 배열   arr[x][y-1]    (2,1)


위와 같은 형태를 보입니다

x y기준으로
xy문이 반복적으로1씩 증가(+) 감소를 (-) 반복합니다
1칸씩 이동간격이 줄어듭니다( 4 33 22 11 )

변수를 선언해보겠습니다
int arr[x][y]   //배열선언
int u = 1         //+1을 해주는 변수

int j = 4          //4칸이동부터 시작하기 때문에 
int i               //j와 비교하여 for문을 돌리기 위하여

int num         // arr에 저장할 정수 값

예상구조는 크게 두부분으로 나눌수 있습니다

int main()

1) 배열의 값을 저장 하는 부분

for(4번 실행 그후 33 22 11 번 실행)
    for(y축으로 이동하며 y값증가 및 감소)
    j--; (4 33 22 11순으로 칸이동)
    for(x축으로 이동하며 x값증가 및 감소)
    u = u*-1; (2줄씩 +1, 그다음 2줄 -1 반복 // 양수와 음수를 1씩 더해주기 위해)


2) 배열의 값을 출력만 하는 부분

for()
   for() printf("%d"arr[x][y])

   printf("\n")

저장후에 출력하는 것이 좋다고 판다되어 2부분으로 나누었습니다

이구조를 바탕으로 하여 작성하면 아래와 같습니다>>>

#include <stdio.h>

 

 int  main()

{

  int arr[30][30];

  int i;

  int x = 0;

  int y = -1;

  int u = 1;

  int num = 1;                   //초기 시작값은1

  int j = 4;

 /*       저장 부분       */

for(;0<=j;)

{

             for(i=0;i<j;i++)         //

             {

                           y=y+u;

                           arr[x][y]=num;

                           num++;

             }

             j--;                      //4 33 22 11번 실행            

            for(i=0;i<j;i++)        //

           {

                        x=x+u;

                        arr[x][y]=num;

                        num++;

            }

   

            u=u*-1;                 //양수 음수변환

}

 /*       출력 부분       */
              
for(x=0;x<4;x++)
             {   

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

                         {

                                      printf("%4d",arr[x][y]);

                         }

            printf("\n");

             }

 

            return 0;

}



정상적으로 출력이 됩니다

보너스로 가로세로 10줄을 가지는 복잡한 달팽이 배열도 조금만 수정하면 간단하게 바꿀수 있습니다

1)배열수정
int arr[30][30] //넉넉하게 배열 선언

2)변수값 수정
int j=10;          //10 99 88 77 순으로 저장하기 위해서

3)출력부분 수정
for(x=0;x<10;x++)
             {   

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

                         {

이상 3가지를 수정하면 조금 더 복잡한 달팽이 배열을 만들수 있습니다


Posted by mantwo