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

C++ 다차원 배열로 두 행렬 더하기: 완벽 가이드

행렬이란 무엇인가?

행렬(matrix)은 숫자들을 행(row)열(column) 형태로 배열한 직사각형 배열을 의미합니다. 행렬은 수학뿐만 아니라 컴퓨터 그래픽스, 데이터 분석, 머신러닝 등 다양한 분야에서 널리 활용됩니다.

예를 들어, 아래와 같이 생긴 배열이 하나의 행렬입니다.

4×3 행렬은 4개의 행과 3개의 열로 구성되며, 다음과 같이 표현할 수 있습니다.

3 5 1
7 1 9
3 9 4
1 6 7

두 행렬의 덧셈 조건

두 행렬을 더하려면 반드시 같은 크기(행과 열의 개수가 동일)여야 합니다. 같은 위치에 있는 원소끼리 서로 더하는 것이 행렬 덧셈의 기본 원리입니다.

C++ 예제 코드

다음은 다차원 배열(2차원 배열)을 사용하여 두 행렬을 더하는 C++ 프로그램입니다.

#include <iostream>
using namespace std;
int main() {
   int r=2, c=4, sum[2][4], i, j;
   int a[2][4] = {{1,5,9,4} , {3,2,8,3}};
   int b[2][4] = {{6,3,8,2} , {1,5,2,9}};
   cout<<"The first matrix is: "<<endl;
   for(i=0; i<r; ++i) {
      for(j=0; j<c; ++j)
      cout<<a[i][j]<<" ";
      cout<<endl;
   }
   cout<<endl;
   cout<<"The second matrix is: "<<endl;
   for(i=0; i<r; ++i) {
      for(j=0; j<c; ++j)
      cout<<b[i][j]<<" ";
      cout<<endl;
   }
   cout<<endl;
   for(i=0;i<r;++i)
   for(j=0;j<c;++j)
   sum[i][j]=a[i][j]+b[i][j];
   cout<<"Sum of the two matrices is:"<<endl;
   for(i=0; i<r; ++i) {
      for(j=0; j<c; ++j)
      cout<<sum[i][j]<<" ";
      cout<<endl;
   }
   return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

The first matrix is:
1 5 9 4
3 2 8 3

The second matrix is:
6 3 8 2
1 5 2 9

Sum of the two matrices is:
7 8 17 6
4 7 10 12

코드 상세 설명

1. 행렬 정의 및 출력

프로그램 시작 부분에서는 먼저 더할 두 행렬 ab를 2차원 배열로 선언하고 초기화합니다. 이후 중첩 for 루프를 사용해 각 행렬의 모든 원소를 화면에 출력합니다.

int a[2][4] = {{1,5,9,4} , {3,2,8,3}};
int b[2][4] = {{6,3,8,2} , {1,5,2,9}};
cout<<"The first matrix is: "<<endl;
for(i=0; i<r; ++i) {
   for(j=0; j<c; ++j)
   cout<<a[i][j]<<" ";
   cout<<endl;
}
cout<<endl;
cout<<"The second matrix is: "<<endl;
for(i=0; i<r; ++i) {
   for(j=0; j<c; ++j)
   cout<<b[i][j]<<" ";
   cout<<endl;
}

2. 행렬 덧셈 수행

두 행렬의 합은 중첩 for 루프(nested for loop)를 이용해 계산됩니다. 바깥쪽 루프는 행을, 안쪽 루프는 열을 순회하면서 같은 위치의 원소끼리 더한 값을 결과 배열 sum[][]에 저장합니다.

for(i=0;i<r;++i)
for(j=0;j<c;++j)
sum[i][j]=a[i][j]+b[i][j];

3. 결과 출력

덧셈이 완료되면 마찬가지로 중첩 for 루프를 사용하여 결과 행렬의 각 원소를 순서대로 화면에 출력합니다.

cout<<"Sum of the two matrices is:"<<endl;
for(i=0; i<r; ++i) {
   for(j=0; j<c; ++j)
   cout<<sum[i][j]<<" ";
   cout<<endl;
}

마무리

이처럼 C++에서는 2차원 배열과 중첩 for 루프만으로도 행렬 덧셈을 손쉽게 구현할 수 있습니다. 시간 복잡도는 행렬의 크기에 비례하여 O(r×c)이며, 이 방식은 행렬 곱셈이나 전치(transpose) 등 다른 행렬 연산을 학습하기 위한 좋은 기초가 됩니다.