길이가 4x4인 int형 2차원 배열을 오른쪽 방향으로 90도 회전시키는 프로그램을 작성하는 문제가 있는데
분명 제대로 작성한 것 같은데 실행해보면 배열이 왼쪽 방향으로 90도가 돌아감. 이유를 모르겠음....
-------------------------------------------------------------------
#include <stdio.h>
void Rotateto(int (*ptr)[4]);
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, j;
for(i=0 ; i<4 ; i++)
{
for(j=0 ; j<4 ; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("\n");
Rotateto(arr);
printf("\n");
Rotateto(arr);
printf("\n");
Rotateto(arr);
printf("\n");
Rotateto(arr);
printf("\n");
return 0;
}
void Rotateto(int (*ptr)[4])
{
int i, j;
int jjab[4][4];
for(i=0 ; i<4 ; i++)
{
for(j=0 ; j<4 ; j++)
{
jjab[i][j] = ptr[i][j];
}
}
for(i=0 ; i<4 ; i++)
{
for(j=0 ; j<4 ; j++)
{
ptr[i][j] = jjab[j][3-i];
}
}
for(i=0 ; i<4 ; i++)
{
for(j=0 ; j<4 ; j++)
{
printf("%d ", ptr[i][j]);
}
printf("\n");
}
}
-----------------------------------------------------------------
여기서ptr[i][j] = jjab[j][3-i]를
ptr[i][j] = jjab[3-j][i] 로 고치면 제대로 오른쪽 방향으로 돌아가는데
배열에 있는 숫자 "1"을 예를 들면 오른쪽으로 회전할때
(0,0) -> (0,3) -> (3,3) -> (3,0) -> (0,0)
이렇게 돌아가니깐
ptr[i][j] = jjab[j][3-i] 라고 써야 오른쪽으로 돌아가는 것 아닌가요?....
3번 하세요 - DCW
270도 = (360 - 90) 도 - DCW
뭐 돌아가는 방향은 그냥 ptr[i][j] = jjab[j][3-i]을 ptr[i][j] = jjab[3-j][i]로 고치면 되긴 하는데 왜 그렇게 되는지를 모르겠음... ptr[i][j] = jjab[j][3-i]로 해야 오른쪽으로 돌아가야 하는거 아닌가요
너 다음카페가입되있으면 챗방에서알려줄게
아니다 코드새로써서걍 글로알려줌
ㄳㄳ
글써놨으니보셈
꼭 돌려서 써야하나.. 참조할때 index만 잘 해서 쓰면 될거같은데 쩝