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

C++에서 정사각형 행렬의 두 대각선에 있는 행별 공통 요소 찾기


2차원 정사각형 행렬이 입력으로 주어졌을 때, 주대각선(primary diagonal)과 부대각선(secondary diagonal) 양쪽에 공통으로 존재하는 요소들을 찾는 것이 목표입니다. 예를 들어 입력 행렬이 다음과 같다면,

1 2 3
2 2 4
1 4 7

주대각선은 1 2 7이고 부대각선은 3 2 1입니다. 따라서 공통 요소는 2입니다.

두 대각선에는 항상 최소 한 개 이상의 공통 요소가 존재합니다. 특히 홀수 크기의 행렬이라면 중앙에 위치한 요소가 두 대각선에 동시에 속하기 때문입니다.

예시

입력 − Matrix[][5] = {{1, 2, 1}, {4, 1, 6}, {1, 8, 1}};

출력 − 대각선의 행별 공통 요소 개수: 3

설명 − 행렬은 다음과 같습니다.

1 2 1
4 1 6
1 8 1

주대각선 = 1 1 1, 부대각선 = 1 1 1

세 값이 모두 공통이므로 count = 3입니다.

입력 − Matrix[][5] = {{1, 4, 4, 1}, {3, 4, 4, 6}, {1, 1, 1, 4}, {1, 9, 9, 2}};

출력 − 대각선의 행별 공통 요소 개수: 3

설명 − 행렬은 다음과 같습니다.

1 4 4 1
3 4 4 6
1 1 1 4
1 9 9 2

주대각선 = 1 4 1 2, 부대각선 = 1 4 1 1

처음 세 값이 공통이므로 count = 3입니다.

프로그램에 적용된 접근 방식

이 접근 방식에서는 먼저 0행부터 정사각형 행렬을 행 단위로 순회합니다. 각 행에서 M[i][i]와 M[i][size-i-1]이 서로 같은지 확인하고, 같다면 해당 요소는 두 대각선의 공통 요소이므로 count를 1 증가시킵니다.

  • 입력 행렬 Matrix[][5]를 받습니다.

  • 행렬의 크기를 설정합니다.

  • countElement(int mt[][5], int size) 함수는 입력 행렬과 그 크기를 매개변수로 받아 주대각선과 부대각선에 공통으로 존재하는 값의 개수를 반환합니다.

  • 초기 count 값을 0으로 설정합니다.

  • i=0부터 i<size까지 for 루프를 사용해 순회합니다.

  • mt[i][i] == mt[i][size-i-1]이면 count를 증가시킵니다.

  • 순회가 끝나면 count를 결과로 반환합니다.

  • main 함수에서 결과를 출력합니다.

예제 코드

#include <iostream>
using namespace std;
int countElement(int mt[][5], int size){
   int count = 0;
   for (int i=0;i<size;i++){
      if (mt[i][i] == mt[i][size-i-1]){
         count=count+1;
      }
   }
   return count;
}
int main(){
   int Matrix[][5] = {{1, 2, 1}, {4, 1, 6}, {1, 8, 1}};
   int size=3;
   cout<<"Row-wise common elements in diagonals:"<<countElement(Matrix, size);
   return 0;
}

출력

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Row-wise common elements in diagonals:3