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

C++로 행렬이 이진 행렬(Binary Matrix)인지 확인하는 방법

이진 행렬(Binary Matrix)은 행렬의 모든 요소가 0 또는 1의 이진 값으로만 구성된 행렬을 의미합니다. 이진 행렬은 부울 행렬(Boolean Matrix), 관계 행렬(Relational Matrix), 논리 행렬(Logical Matrix)이라고도 불립니다.

이진 행렬의 예시

아래 두 행렬을 비교해 보겠습니다.

행렬 A행렬 B
0  1  0
1  1  0
1  0  1
0  3  0
1  1  0
1  0  2
이진 행렬 O 이진 행렬 X

왼쪽 행렬 A는 모든 요소가 0 또는 1로만 이루어져 있으므로 이진 행렬입니다. 반면 오른쪽 행렬 B에는 3과 2처럼 0 또는 1이 아닌 값이 포함되어 있으므로 이진 행렬이 아닙니다.

예제

입력: m[4][3] = { { 0, 0, 0, 0 },
   { 1, 1, 1, 1 },
   { 1, 1, 0, 0 } }
출력: 이진 행렬입니다(binary matrix)

접근 방법

행렬 전체를 순회하면서 모든 요소를 검사합니다. 모든 요소가 0 또는 1이라면 "이진 행렬입니다"를 출력하고, 하나라도 다른 값이 존재한다면 "이진 행렬이 아닙니다"를 출력하면 됩니다.

알고리즘

Start
Step 1 -> 매크로 정의: #define row 3, #define col 4
Step 2 -> 행렬이 이진 행렬인지 검사하는 함수 선언
   bool check(int arr[][col])
      Loop For int i = 0 and i < row and i++
         Loop For int j = 0 and j < col and j++
            IF(!(arr[i][j] == 0 || arr[i][j] == 1))
               return false
            End
         End
      End
   return true
Step 3 -> main() 함수에서
   배열 선언: int arr[row][col] = { { 0, 0, 0, 0 },
      { 1, 1, 1, 1 },
      { 1, 1, 0, 0 } }
   If (check(arr))
      "이진 행렬입니다" 출력
   Else
      "이진 행렬이 아닙니다" 출력
Stop

C++ 구현 코드

#include <bits/stdc++.h>
using namespace std;
#define row 3
#define col 4
// 행렬이 이진 행렬인지 검사하는 함수
bool check(int arr[][col]){
   for (int i = 0; i < row; i++){
      for (int j = 0; j < col; j++){
         if (!(arr[i][j] == 0 || arr[i][j] == 1))
            return false;
      }
   }
   return true;
}
int main(){
   int arr[row][col] = { { 0, 0, 0, 0 },
      { 1, 1, 1, 1 },
      { 1, 1, 0, 0 } };
   if (check(arr))
      cout << "its a binary matrix";
   else
      cout << "its not a binary matrix";
   return 0;
}

실행 결과

its a binary matrix

위 코드는 시간 복잡도 O(row × col)로 행렬의 모든 요소를 한 번씩만 검사하므로 효율적입니다. 행렬의 크기가 커져도 선형 시간 안에 이진 행렬 여부를 판별할 수 있습니다.