반응형
<아이디어>
1. 배열의 인덱스의 움직임을 관찰한다.
2. a배열의 [0,0] -> [4,4] / [0,1] -> [3,4] ...
3.
a 배열 | b 배열 | |||
0 | 0 | => | 3 | 3 |
1 | 0 | => | 3 | 2 |
2 | 0 | => | 3 | 1 |
3 | 0 | => | 3 | 0 |
반응형
<해설>
1. 변수 i, j, k 세개를 가지고 배열의 변화를 표현하였다.
2. 변수 j의 경우 행열이 변화하는 규칙을 보니 ja + jb = 3이라는 규칙이 보였다
3. 따라서 jb를 3-jb로 바꾸어 넣었다.
<발전>
1. j와 마찬가지로 i와 k사이의 규칙을 찾으면 i, j 변수 두개로만 작성이 가능할것 같다.
#include <stdio.h>
int a[4][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13, 14, 15, 16} };
int b[4][4];
void transpose1(void)
{
int i, j, k;
for (i = 0, k= 3; i < 4; i++, k--)
{
for (j = 0; j <4 ; j++)
{
b[3-j][k] = a[i][j]; // b배열의 행은 0->3으로 증가, 열은 3으로 고정,
} // a배열의 행은 0으로 고정, 열은 0 -> 3으로 증가.
} // 안쪽 for문이 끝나면 a의 행은 1로 증가, b의 열은 2로 감소
}
void main(void)
{
int i, j;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
transpose1();
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", b[i][j]);
}
printf("\n");
}
}
반응형