Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 구현하는 행렬의 전치(Transpose) 프로그램

행렬(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)로, 행렬의 모든 원소를 한 번씩 순회하면 되므로 매우 효율적입니다. 이 개념은 선형대수학뿐만 아니라 그래프 처리, 이미지 회전 등 다양한 프로그래밍 분야에서 활용되므로 꼭 익혀두시기 바랍니다.