본문 바로가기

카테고리 없음

(C언어) 전치행렬 transposed matrix M by N

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printMatrix(int array[][4], int row, int col) {
	int i, j;
	for (i = 0; i < row; i++) {
		for (j = 0; j < col; j++)
			printf("%d\t", array[i][j]);
		printf("\n");
	}
}

void printMatrix2(int array[][3], int row, int col) {
	int i, j;
	for (i = 0; i < row; i++) {
		for (j = 0; j < col; j++)
			printf("%d\t", array[i][j]);
		printf("\n");
	}
}

// M by N 행렬을 전치(transpose)한다.
// matrix[][] : 전치할 대상  transpose[][] : 전치해서 저장할 곳
// row: 행   col: 열 
void transposeMbyN(int matrix[][4], int transposed[][3], int row, int col) {
	int i, j, count = 0;

	for (i = 0; i < row; i++) {
		for (j = 0; j < col; j++) {
			transposed[j][i] = matrix[i][j]; // 행과 열 인덱스를 바꾸어 저장.
			count++;
		}
	}
	printf("%d개의 원소를 전치했습니다.\n", count);
}

int main() {
	int matrix[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
	int transposed[4][3] = { 0, };

	printMatrix(matrix, 3, 4);
	printf("-------------------------------\n");
	
	transposeMbyN(matrix, transposed, 3, 4);
	printMatrix2(transposed, 4, 3);

	return 0;
}

------------출력 결과---------------
1       2       3       4
5       6       7       8
9       10      11      12
-------------------------------
12개의 원소를 전치했습니다.
1       5       9
2       6       10
3       7       11
4       8       12