본문 바로가기
카테고리 없음

2차원 행렬 Transpose / 2차원배열 Transpose

by Hyper하이퍼 2022. 12. 25.
반응형

<아이디어>

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");
	}
}
반응형