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