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

C++에서 두 행렬이 동일한지 확인하는 프로그램

행이 'r'개이고 열이 'c'개인 두 개의 행렬 M1[r][c]와 M2[r][c]가 주어졌을 때, 두 행렬이 서로 동일한지 확인해야 합니다. 두 행렬이 동일하다면 "두 행렬은 동일합니다"를 출력하고, 그렇지 않다면 "두 행렬은 동일하지 않습니다"를 출력하면 됩니다.

동일한 행렬(Identical Matrix)이란?

두 행렬 M1과 M2가 다음 조건을 모두 만족할 때 '동일한 행렬'이라고 합니다.

  • 두 행렬의 행과 열의 개수가 같아야 합니다.
  • 모든 위치에서 M1[i][j]의 값이 M2[i][j]의 값과 같아야 합니다.

예를 들어 아래 그림처럼 3x3 크기의 두 행렬 m1과 m2는 모든 요소가 같으므로 동일한 행렬입니다.

$$M1[3][3]=\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ \end {bmatrix} \:\:\:\:M2[3][3] =\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ \end{bmatrix} $$

입력 예시

Input: a[n][n] = { {2, 2, 2, 2},
   {2, 2, 2, 2},
   {3, 3, 3, 3},
   {3, 3, 3, 3}};
   b[n][n] = { {2, 2, 2, 2},
      {2, 2, 2, 2},
      {3, 3, 3, 3},
      {3, 3, 3, 3}};
Output: matrices are identical

Input: a[n][n] = { {2, 2, 2, 2},
   {2, 2, 1, 2},
   {3, 3, 3, 3},
   {3, 3, 3, 3}};
   b[n][n] = { {2, 2, 2, 2},
      {2, 2, 5, 2},
      {3, 3, 3, 3},
      {3, 3, 3, 3}};
Output: matrices are not identical

접근 방법

두 행렬 a[i][j]와 b[i][j]를 순회하면서 각 위치의 값이 같은지 비교합니다. 모든 요소에 대해 a[i][j] == b[i][j]가 참이라면 두 행렬은 동일한 것이고, 단 하나라도 다른 값이 있다면 동일하지 않은 것입니다.

알고리즘

Start
Step 1 -> 매크로 정의: #define n 4
Step 2 -> 두 행렬이 같은지 검사하는 함수 선언
   int check(int a[][n], int b[][n])
      정수형 변수 i, j 선언
      반복문 For i = 0 ~ i < n, i++
         반복문 For j = 0 ~ j < n, j++
            IF (a[i][j] != b[i][j])
               return 0
            End
      End
   End
   return 1
Step 3 -> main() 함수에서
   행렬 a[n][n] = { {2, 2, 2, 2},
      {2, 2, 2, 2},
      {3, 3, 3, 3},
      {3, 3, 3, 3}} 선언
   행렬 b[n][n] = { {2, 2, 2, 2},
      {2, 2, 2, 2},
      {3, 3, 3, 3},
      {3, 3, 3, 3}} 선언
   IF (check(a, b))
      "matrices are identical" 출력
   Else
      "matrices are not identical" 출력
Stop

C++ 구현 코드

#include <bits/stdc++.h>
#define n 4
using namespace std;
// 두 행렬이 같은지 검사하는 함수
int check(int a[][n], int b[][n]){
   int i, j;
   for (i = 0; i < n; i++)
      for (j = 0; j < n; j++)
         if (a[i][j] != b[i][j])
      return 0;
   return 1;
}
int main(){
   int a[n][n] = { {2, 2, 2, 2},
      {2, 2, 2, 2},
      {3, 3, 3, 3},
      {3, 3, 3, 3}};
   int b[n][n] = { {2, 2, 2, 2},
      {2, 2, 2, 2},
      {3, 3, 3, 3},
      {3, 3, 3, 3}};
   if (check(a, b))
      cout << "matrices are identical";
   else
      cout << "matrices are not identical";
   return 0;
}

실행 결과

matrices are identical

위 코드는 이중 반복문을 사용해 두 행렬의 모든 요소를 하나씩 비교하는 방식입니다. 시간 복잡도는 O(n²)이며, 중간에 다른 값을 발견하면 즉시 0을 반환하여 불필요한 비교를 줄일 수 있어 효율적입니다.