행렬(matrix)은 숫자들을 행(row)과 열(column)의 형태로 배열한 직사각형 구조입니다. 행렬의 전치(transpose)란 원래 행렬의 행을 열로, 열을 행으로 바꿔 만든 새로운 행렬을 의미합니다.
예를 들어, 다음과 같은 3×3 행렬이 주어졌다고 가정해 보겠습니다.
1 2 3 4 5 6 7 8 9
이 행렬의 전치 행렬은 다음과 같습니다.
1 4 7 2 5 8 3 6 9
행렬 전치 C++ 예제 코드
행렬의 전치를 구하는 C++ 프로그램은 다음과 같습니다.
#include<iostream>
using namespace std;
int main() {
int transpose[10][10], r=3, c=2, i, j;
int a[3][3] = { {1, 2} , {3, 4} , {5, 6} };
cout<<"The matrix is:"<<endl;
for(i=0; i<r; ++i) {
for(j=0; j<c; ++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
for(i=0; i<r; ++i)
for(j=0; j<c; ++j) {
transpose[j][i] = a[i][j];
}
cout<<"The transpose of the matrix is:"<<endl;
for(i=0; i<c; ++i) {
for(j=0; j<r; ++j)
cout<<transpose[i][j]<<" ";
cout<<endl;
}
return 0;
}실행 결과
The matrix is: 1 2 3 4 5 6 The transpose of the matrix is: 1 3 5 2 4 6
코드 상세 설명
1. 행렬 초기화 및 출력
프로그램에서는 먼저 3×2 크기의 행렬을 초기화한 뒤, 이중 for 루프를 사용하여 행렬의 값을 화면에 출력합니다. 해당 코드는 다음과 같습니다.
int a[3][3] = { {1, 2} , {3, 4} , {5, 6} };
cout<<"The matrix is:"<<endl;
for(i=0; i<r; ++i) {
for(j=0; j<c; ++j)
cout<<a[i][j]<<" ";
cout<<endl;
}2. 전치 행렬 계산
전치 행렬은 중첩 for 루프를 이용해 계산됩니다. 핵심 로직은 원래 행렬의 a[i][j] 값을 전치 행렬의 transpose[j][i] 위치에 저장하는 것입니다. 즉, 행 인덱스와 열 인덱스를 서로 바꿔주는 방식입니다.
for(i=0; i<r; ++i)
for(j=0; j<c; ++j) {
transpose[j][i] = a[i][j];
}3. 전치 행렬 출력
마지막으로 계산이 완료된 전치 행렬을 화면에 출력합니다. 이때 출력 시에는 행과 열의 크기가 서로 바뀌었으므로, 바깥쪽 루프는 열 개수(c)만큼, 안쪽 루프는 행 개수(r)만큼 반복한다는 점에 유의해야 합니다.
cout<<"The transpose of the matrix is:"<<endl;
for(i=0; i<c; ++i) {
for(j=0; j<r; ++j)
cout<<transpose[i][j]<<" ";
cout<<endl;
}정리
행렬의 전치는 transpose[j][i] = a[i][j]라는 간단한 인덱스 교환 규칙으로 구현할 수 있습니다. 이 알고리즘의 시간 복잡도는 O(r×c)로, 행렬의 모든 원소를 한 번씩 순회하면 되므로 매우 효율적입니다. 이 개념은 선형대수학뿐만 아니라 그래프 처리, 이미지 회전 등 다양한 프로그래밍 분야에서 활용되므로 꼭 익혀두시기 바랍니다.