프로그래밍

 3198, 1/160 회원가입  로그인  
   호박
   C언어 문제풀이중 궁금한게 생겼는데요

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6451 [복사]


문제 내용은 4X4 int형 2차원 배열을 선언하고, 모든 요소를 아래 모양과 같은 형태로 초기화한다.

그리고 배열의 요소들을 오른쪽 방향으로 90도씩 이동시켜서 출력하는 프로그램을 작성해보자 입니다.

1   2   3   4
5   6   7   8
9   10 11 12
13 14 15 16  (문제에서 제시한 배열의 형태)


이렇게 초기화된 배열을

13 9  5  1
14 10 6 2
15 11 7 3
16 12 8 4

같이 90도 이동시켜서 출력하란 문제인데요. 일단 저런 식으로 출력이 되게 코드는 짰습니다.

다만 for문이 너무 중첩되면서 가독성도 떨어지고 제가 한 방식이 최선인지 의문이 들더군요.

아래는 제가 짠 코드입니다.

#include<stdio.h>

void Turn(int(*arr)[4]);

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

        Turn(arr);

        return 0;
}

void Turn(int(*arr)[4])
{
        int i, j, k;
        int arr2[4][4]={};
        for(k=0;k<4;k++)
        {
          for(i=0;i<4;i++)
          {
                for(j=0;j<4;j++)
                {
                        arr2[j][3-i]=arr[i][j];
                }
          }
          for(i=0;i<4;i++)
          {
                  for(j=0;j<4;j++)
                  {
                        printf("%4d", arr2[i][j]);
                        arr[i][j]=arr2[i][j];
                  }
                  printf("\n");
          }
                    printf(" \n\n");
        }
}
        


여기서 Turn 함수를 어떻게 하면 더보기 좋게 짤 수 있을까요??
고수분들이라면 어떻게 코드를 짜실지 궁금합니다.

  Hit : 4774     Date : 2014/03/30 10:34



    
MainThread 2차원 배열을 머리속으로 한번 그려보시고 인덱스의 규칙성을 생각해보세요

void Turn(int (*arr)[4]);

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

Turn(arr);
return 0;
}

void Turn(int (*arr)[4])
{
int i,j;

for(int i=0; i<4; i++)
{
for(int j=3; j>=0; j--)
{
printf("%d ",arr[j][i]);
}
printf("\n");
}
}
From MainThread
2014/05/18