열혈강의책 도전프로그래밍 3 도전1번 풀고있습니다..
-문제
길이가 4x4인 2차원 배열을 선언하고, 모든 요소를 아래 그림의 왼쪽에 있는 형태와 동일하게 초기화 하자
그리고 배열의 요소들을 오른쪽 방향으로 90도씩 이동시켜서 그 결과를 출력하는 ㅍ로그램을 작성해 보자.
참고로 배열이 변경되는 형태는 다음과 같다.
1 2 3 4 13 9 5 1 16 15 14 13 4 8 12 16
5 6 7 8 -> 14 10 6 2 -> 12 11 10 9 -> 3 7 11 15
9 10 11 12 15 11 7 3 8 7 6 5 2 6 10 14
13 14 15 16 16 12 8 4 4 3 2 1 1 5 9 13
이런 문제인데요
제가 만든 소스는 이렇습니다
보기 쉽게 중요하다고 생각 되는 문장에 //★를 넣을게요
#include <stdio.h>
int main(void)
{
int arr2d[4][4]={ //배열 저장
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
int i,j;
int temp;
int r=0;
/* 배열의 출력 */
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%4d ",arr2d[i][j]); // ★
}
printf("\n");
}
printf("\n");
/* 배열의 회전1 */
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
temp=arr2d[3-j][i]; // ★
printf("%4d ", temp);
}
printf("\n");
}
printf("\n");
/* 배열의 회전2 */
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
temp=arr2d[3-i][3-j]; // ★
printf("%4d ", temp);
}
printf("\n");
}
printf("\n");
/* 배열의 회전3 */
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
temp=arr2d[j][3-i]; // ★
printf("%4d ", temp);
}
printf("\n");
}
return 0;
}
이런 식으로 저는 이 문제를 풀 때 배열자체를 그려 놓고 각 요소를 1) 앞과뒤를 바꾸고 2) 가로가3..가로가2..가로가1..가로가0.. 등등으로 계산해서 풀었습니다
근데 저런식으로 다 만들어 놓고 나니
실행결과는 문제와 동일한데
과연 내가 푼 방식을 의도한건지
아니면 배열A를 딱 하나만 만들어놓고
그 배열A 만 가지고 90도 돌리고
90도돌린 배열A를 가지고 또 90도 돌리고
합180도 돌린 배열A를 가지고 또 90 돌리는 식으로 풀라는건지
잘 모르겠네요 ㅠㅠ