행이 '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을 반환하여 불필요한 비교를 줄일 수 있어 효율적입니다.