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

C#에서 행렬 전치(Transpose) 구현하기

행렬의 전치(Transpose)란 행렬을 주대각선을 기준으로 뒤집는 연산을 말합니다. 전치를 수행하면 기존 행렬의 행 요소는 열로, 열 요소는 행으로 위치가 바뀌게 됩니다.

행렬 전치의 개념

예를 들어 3×3 행렬을 전치하면 다음과 같이 변합니다.

전치 전 행렬:
1 2 3
4 5 6
7 8 9

전치 후 행렬:
1 4 7
2 5 8
3 6 9

위 예시에서 볼 수 있듯이, 원래 행렬의 첫 번째 행(1, 2, 3)이 전치 후에는 첫 번째 열로 이동한 것을 확인할 수 있습니다.

C# 코드 예제

다음은 C#에서 사용자로부터 행렬의 크기와 요소를 입력받아 전치 행렬을 구하는 전체 코드입니다.

using System;
public class Demo {
    public static void Main() {
        int i, j, m, n;
        int[] arr1 = new int[30, 30];
        int[] arr2 = new int[30, 30];

        Console.Write("\n행렬의 행과 열의 개수를 입력하세요 :\n");
        Console.Write("입력된 행의 개수 = ");
        m = Convert.ToInt32(Console.ReadLine());

        Console.Write("입력된 열의 개수 = ");
        n = Convert.ToInt32(Console.ReadLine());

        Console.Write("행렬의 요소를 입력하세요...\n");
        for (i = 0; i < m; i++) {
            for (j = 0; j < n; j++) {
                Console.Write("\n [{0}],[{1}] : ", i, j);
                arr1[i, j] = Convert.ToInt32(Console.ReadLine());
            }
        }

        Console.Write("\n\n전치 전 행렬:\n");
        for (i = 0; i < m; i++) {
            Console.Write("\n");
            for (j = 0; j < n; j++)
                Console.Write("{0}\t", arr1[i, j]);
        }

        // 전치 연산: 행과 열의 인덱스를 서로 교환하여 저장
        for (i = 0; i < m; i++) {
            for (j = 0; j < n; j++) {
                arr2[j, i] = arr1[i, j];
            }
        }

        Console.Write("\n\n전치 후 행렬: ");
        for (i = 0; i < m; i++) {
            Console.Write("\n");
            for (j = 0; j < n; j++) {
                Console.Write("{0}\t", arr2[i, j]);
            }
        }
        Console.Write("\n\n");
    }
}

코드 핵심 로직 설명

전치 연산의 핵심은 다음 한 줄입니다.

arr2[j, i] = arr1[i, j];

원본 배열 arr1[i, j] 위치에 있는 값을 결과 배열 arr2[j, i] 위치에 저장함으로써, 행과 열의 인덱스를 서로 교환하게 됩니다. 이렇게 하면 별도의 복잡한 알고리즘 없이 간단한 이중 반복문만으로 전치 행렬을 얻을 수 있습니다.

실행 결과

위 프로그램을 실행하고 행과 열의 개수, 그리고 행렬의 각 요소를 입력하면 다음과 같은 결과가 출력됩니다.

행렬의 행과 열의 개수를 입력하세요 :
입력된 행의 개수 = 3
입력된 열의 개수 = 3
행렬의 요소를 입력하세요...

[0],[0] : 1
[0],[1] : 2
[0],[2] : 3
[1],[0] : 4
[1],[1] : 5
[1],[2] : 6
[2],[0] : 7
[2],[1] : 8
[2],[2] : 9

전치 전 행렬:
1	2	3
4	5	6
7	8	9

전치 후 행렬:
1	4	7
2	5	8
3	6	9

이처럼 C#의 2차원 배열과 이중 반복문을 활용하면 행렬 전치를 손쉽게 구현할 수 있습니다. 입력 크기를 자유롭게 조절할 수 있어 정방행렬뿐만 아니라 다양한 크기의 행렬에도 동일한 방식으로 적용할 수 있습니다.