4 X 4 int형 2차원 배열을 선언하고, 모든 요소를 아래 그림의 왼쪽에 있는 형태와 동일하게 초기화하자. 그리고 배열의 요소들을 오른쪽 방향으로 90˚씩 이동시켜서 출력하는 프로그램을 작성해보자. 배열이 변경되는 형태는 다음과 같다.

#include <stdio.h>


void arrprint(int (*a)[4], int size);
void rspin(int (*a)[4], int size);


int main(void)
{
      int arr[4][4]={
            {1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10, 11, 12},
            {13, 14, 15, 16}
      };
      int i, size;


      size=(sizeof(arr)/sizeof(int))/4;


      for(i=0; i<size; i++)
      {
            arrprint(arr, size);
            rspin(arr, size);
      }


      return 0;
}


void arrprint(int (*a)[4], int size)
{
      int i, j;


      for(i=0; i<size; i++)
      {
            for(j=0; j<size; j++)
                  printf("%5d ", a[i][j]);
            printf("\n");
      }

      printf("\n\n");

}


void rspin(int (*a)[4], int size)
{
      int temp[4];
      int i, j;


      for(i=0; i<size/2; i++)
      {
            for(j=i; j<size-i-i; j++)
                  temp[j]=a[i][j];
            for(j=i; j<size-1-i; j++)
                  a[i][2-j]=a[j+1][i];
            for(j=i+1; j<size-i; j++)
                  a[j][i]=a[3-i][j];
            for(j=i+1; j<size-i; j++)
                  a[3-i][j]=a[3-j][3-i];
            for(j=i; j<size-i-i; j++)
                  a[j][3-i]=temp[j];
      }
}

/*
megashocking님의 Hisworld.tistory.com에서 배워야 할 부분
rspin(int (*arr)[4], int rep) //rep는 배열을 90도씩 회전시키는 수.
{
      int i, j, k;
      int p_arr[4][4];


      for(k=0 ; k<rep ; k++)
      {
            for(i=0 ; i<4 ; i++)
                  for(j=0 ; j<4 ; j++)
                        p_arr[i][j]=arr[3-j][i]; //임시배열에 회전 시킨 후의 위치에 저장.


            for(i=0 ; i<4 ; i++)
                  for(j=0 ; j<4 ; j++)
                        arr[i][j]=p_arr[i][j]; //임시배열을 원래 배열에 복사.
      }
}
*/

신고

+ Recent posts