이 문제에서는 크기가 n*n인 2D 정방 행렬 mat[][]이 제공됩니다. 우리의 임무는 주어진 행렬이 Toeplitz인지 아닌지를 찾는 것입니다.
토플리츠 행렬 대각 행렬이라고도 하는 대각 행렬은 대각선의 요소가 왼쪽 위 모서리에서 오른쪽 아래 모서리로 시작하는 행렬입니다.
문제를 이해하기 위해 예를 들어 보겠습니다.
입력:
매트[][] ={{3, 5, 1},
{4, 3, 2},
{1, 2, 3}}
출력: 예
설명:
대각선 :(0, 0), (1, 1) , (2, 2) 값은 3과 같습니다.
해결 방법:
문제를 해결하는 간단한 방법은 대각선 인덱스에서 모든 요소를 확인하는 것입니다. 이 대각선 값은 i와 j의 값이 동일한 인덱스가 됩니다.
따라서 i -> 0 ~ n 및 j -> 0 ~ n을 모두 확인해야 합니다. i =j이고 mat[i][j]는 모두 동일합니다.
우리 솔루션의 작동을 설명하는 프로그램,
예시
#include <iostream> using namespace std; #define N 4 bool isToeplizMatrix(int mat[N][N]) { int diagVal = mat[0][0]; for(int i = 0; i < N ; i++) { if(mat[i][i] != diagVal){ return false; } } return true; } int main(){ int mat[N][N] = { { 6, 7, 8, 9 }, { 4, 6, 7, 8 }, { 1, 4, 6, 7 }, { 0, 1, 4, 6 }}; if (isToeplizMatrix(mat)) cout<<"Matrix is a Toepliz matrix."; else cout<<"Matrix is not a Toepliz matrix."; return 0; }
출력
Matrix is a Toepliz matrix.