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

C++로 동일한 행렬의 행 우선·열 우선 순서 행렬을 더해 만든 행렬의 자취(Trace) 구하기

이 튜토리얼에서는 동일한 행렬을 행 우선(row-major) 방식과 열 우선(column-major) 방식으로 각각 배치하여 만든 두 행렬을 더한 뒤, 그 결과 행렬의 자취(trace)를 구하는 프로그램을 작성해 보겠습니다.

먼저 자취란 행렬의 주대각선(main diagonal), 즉 왼쪽 위에서 오른쪽 아래로 이어지는 대각선 요소들의 합을 의미합니다.

행렬이 만들어지는 과정

행렬의 차수(order)가 주어졌을 때 두 가지 방식으로 행렬이 어떻게 형성되는지 살펴보겠습니다.

차수(Order) − 3 x 3

행 우선(Row Major) 행렬

행 우선 방식은 숫자 1부터 시작하여 한 행을 채운 다음 다음 행으로 넘어가는 방식입니다.

123
456
789

열 우선(Column Major) 행렬

반면 열 우선 방식은 한 열을 모두 채운 후 다음 열로 넘어가는 방식입니다.

147
258
369

이렇게 만든 두 행렬을 서로 더하면 결과 행렬이 되고, 이 결과 행렬의 자취가 우리가 찾고자 하는 값입니다.

문제 해결 절차

문제를 해결하기 위해 다음과 같은 4단계를 거칩니다.

  • 행 우선(row-major) 행렬을 생성합니다.

  • 열 우선(column-major) 행렬을 생성합니다.

  • 두 행렬을 더하여 결과 행렬을 저장합니다.

  • 결과 행렬의 자취를 계산하여 출력합니다.

예제 코드

전체 코드는 다음과 같습니다.

#include <iostream>
#include <bits/stdc++.h>
#include <regex>
using namespace std;
int traceOfRowAndColumnMajorMatrices(int m, int n) {
    int row_major[m][n], column_major[m][n], addition_result[m][n], count = 1;
    // 1. 행 우선(row-major) 행렬 생성
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            row_major[i][j] = count;
            count += 1;
        }
    }
    // 2. 열 우선(column-major) 행렬 생성
    count = 1;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            column_major[j][i] = count;
            count += 1;
        }
    }
    // 3. 두 행렬의 합 계산
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            addition_result[j][i] = row_major[i][j] + column_major[i][j];
        }
    }
    // 4. 대각선 요소의 합(자취) 계산
    int trace = 0;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (i == j) {
                trace += addition_result[i][j];
            }
        }
    }
    return trace;
}
int main() {
    int m = 3, n = 3;
    cout << traceOfRowAndColumnMajorMatrices(m, n) << endl;
    return 0;
}

출력 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

30

결과 검증

두 행렬을 더한 결과 행렬은 다음과 같습니다.

2610
61014
101418

주대각선 요소인 2, 10, 18의 합은 30으로, 프로그램의 출력값과 일치함을 확인할 수 있습니다.

마무리

이번 튜토리얼에서는 행 우선과 열 우선 방식으로 구성된 행렬의 합에서 자취를 구하는 방법을 알아보았습니다. 내용에 대해 궁금한 점이 있다면 댓글로 남겨주세요.