IT_Programming/C · C++

[C] 달팽이 배열

JJun ™ 2009. 6. 5. 07:46

정보 처리 기사 문제집에 단골로 나오는 문제인가...???

정보 처리 기사 책 같은건 돈 아까워서 산 적은 없지만,

공부는 해봐야 하기에 뭐가 나오나 잠깐 빌려본 적은 있다..

그 때 본 간단한 슈도 코드(pseudo code)가 떠올라서 C언어로 짜봤다.

 

================================================================================================

 

[ 실행화면 ]

 

================================================================================================

 

[ 소스코드 ]

 

#include <stdio.h>
#include <stdlib.h>

 

int main(void)
{
       int i, j, x, y, idx, idy, size, num, flag;

 

       // 사이즈 입력
       printf("사이즈를 입력하세요 : ");
       scanf("%d", &size);

 

       // 동적 메모리 할당
       int **arr = (int **)malloc(sizeof(int *) * size);
       for(i=0; i<size; ++i) {
              *(arr + i) = (int *)malloc(sizeof(int) * size);

        }

 

       x = 0;       // 배열의 행위치
       y = -1;     // 배열의 열위치
       num = 1;  // 들어갈 숫자
       flag = 1;   // 증감 플래그
       idx = idy = size;

      

       // 값 대입
       for(i=0; i<idy; ++i)
       {

                 // 가로로 이동하면서 하나씩 할당
              for(j=0; j<idx; ++j)
              {
                     y = y + flag;
                     arr[x][y] = num++;
              }

            

                 // 횟수 줄이고

              idx--;

            

              if(idx != 0)
              {

                         // 세로로 이동하면서 하나씩 할당 
                     for(j=0; j<idx; ++j)
                     {
                            x = x + flag;
                            arr[x][y] = num++;
                     }
              }
  

                // 이동방향의 양음이 바뀜
              flag *= (-1);
       }


       // 화면에 동적할당 처리된 2차원 배열 출력
       for(i=0; i<size; ++i)
       {
              for(j=0; j<size; ++j)
              {
                     printf("%3d ", arr[i][j]);
              }
              printf("\n");
       }

 

       // 동적 할당 메모리 해제
       for(i=0; i<size; ++i) {
              free(*(arr + i));

        }

       free(arr);

      

       return 0;
}

 

================================================================================================