이 문제에서는 행렬이 주어집니다. 우리의 임무는 C++의 행렬에서 모래시계의 최대 합을 찾는 프로그램을 만드는 것입니다.
프로그램 설명 − 여기에서 주어진 행렬 요소에 대해 생성할 수 있는 모든 모래시계의 최대 합을 찾습니다.
모래시계 는 다음과 같은 형태로 행렬에서 만들어진 7개의 요소 모양입니다.
X X X X X X X
문제를 이해하기 위해 예를 들어 보겠습니다.
입력 -
array ={ {2 4 0 0} {0 1 1 0} {4 2 1 0} {0 3 0 1}}
출력 -
설명 -
Hour glass are : 2 4 0 0 1 1 1 2 4 2 1 0 3 0 4 0 0 1 1 0 1 1 2 1 0 3 0 1
따라서 다음 인덱스를 사용하여 모래시계를 만들 수 있습니다.
matrix[i][j] matrix[i][j+1] matrix[i][j+2] matrix[i+1][j+1] matrix[i+2][j] matrix[i+2][j+1] matrix[i+2][j+2]
[0][0]에서 [R2][C-2] 시작점까지 배열의 이러한 모든 요소의 합을 찾습니다. 그리고 배열 요소에서 생성된 이 모든 모래시계에 대한 maxSum을 찾습니다.
예
솔루션의 작동을 설명하는 프로그램,
#include<iostream> using namespace std; const int row = 4; const int col = 4; int findHourGlassSum(int mat[row][col]){ if (row<3 || col<3) return -1; int maxSum = 0; for (int i=0; i<row-2; i++){ for (int j=0; j<col-2; j++){ int hrSum = (mat[i][j]+mat[i][j+1]+mat[i][j+2])+ (mat[i+1][j+1])+ (mat[i+2][j]+mat[i+2][j+1]+mat[i+2][j+2]); maxSum = max(maxSum, hrSum); } } return maxSum; } int main() { int mat[row][col] = { {2, 4, 0, 0}, {0, 1, 1, 0}, {4, 2, 1, 0}, {0, 3, 0, 1}}; int maxSum = findHourGlassSum(mat); if (maxSum == -1) cout<<"Not possible"; else cout<<"Maximum sum of hour glass created is "<<maxSum; return 0; }
출력
Maximum sum of hour glass created is 14