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


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


배열을 가리키는 화살 모양대로 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

댓글을 달아 주세요

  1. 2011.09.13 22:38  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. mantwo 2011.09.19 00:42 신고  댓글주소  수정/삭제  댓글쓰기

    아 요즘 블로그에 너무 소흘해서 늦게 답변을 다네요 ㅠ.ㅠ

    j를 계속 감소시켜 for문에서 결국 나오게 됩니다

    왜나오게 되는지는....
    for문은 무식하게 공부하는게 많이 와닿는거 같습니다 일단 한번 적어보시면 이해가 가실겁니다
    한번돌때 발생하는 값들을 연습장에 적어 보시면
    프로그램이 한눈에 들어오실거에요

    방문해주셔서 진심 감사합니다

  3. asha 2012.05.04 13:26  댓글주소  수정/삭제  댓글쓰기

    포스팅 깔끔하네요.. 잘보고갑니다~

  4. Colabear 2012.05.13 03:30  댓글주소  수정/삭제  댓글쓰기

    똑똑하다... 방향변환 할때 u*(-1) 감탄... i, j 쓰는것도 그렇고... 아 갈길이 멀구나...

  5. 우와 2012.10.21 03:11  댓글주소  수정/삭제  댓글쓰기

    정말 깔끔하네요. 많이 배우고 갑니다.

  6. rgss0506 2013.02.22 17:10  댓글주소  수정/삭제  댓글쓰기

    보고감동받았어요...
    이정도는하려면아직갈길이멀었네요...ㅋ

  7. 혜온 2013.04.03 16:05 신고  댓글주소  수정/삭제  댓글쓰기

    아.... 살아있네....님 최고!

  8. 기린씌 2014.02.20 17:09  댓글주소  수정/삭제  댓글쓰기

    우와 대단하시네요.. 요령도 있으시고..