Context
Given a 2D Array, :
Given a 2D Array, :
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
We define an hourglass in to be a subset of values with indices falling in this pattern in 's graphical representation:
a b c
d
e f g
There are hourglasses in , and an hourglass sum is the sum of an hourglass' values.
Task
Calculate the hourglass sum for every hourglass in , then print the maximum hourglass sum.
Calculate the hourglass sum for every hourglass in , then print the maximum hourglass sum.
Note: If you have already solved the Java domain's Java 2D Array challenge, you may wish to skip this challenge.
Input Format
There are lines of input, where each line contains space-separated integers describing 2D Array ; every value in will be in the inclusive range of to .
Constraints
Output Format
Print the largest (maximum) hourglass sum found in .
Sample Input
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
Sample Output
19
Explanation
contains the following hourglasses:
1 1 1 1 1 0 1 0 0 0 0 0
1 0 0 0
1 1 1 1 1 0 1 0 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0
1 1 0 0
0 0 2 0 2 4 2 4 4 4 4 0
1 1 1 1 1 0 1 0 0 0 0 0
0 2 4 4
0 0 0 0 0 2 0 2 0 2 0 0
0 0 2 0 2 4 2 4 4 4 4 0
0 0 2 0
0 0 1 0 1 2 1 2 4 2 4 0
The hourglass with the maximum sum () is:
2 4 4
2
1 2 4
Program below:
package com.rohan.test;
import java.util.Scanner;
public class HourGlassProblem {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int arr[][] = new int[6][6];
int count = 0;
int [] sum = new int[20];
for(int arr_i=0; arr_i < 6; arr_i++) {
for(int arr_j=0; arr_j < 6; arr_j++) {
arr[arr_i][arr_j] = in.nextInt();
}
}
int counter = 0;
for(int i = 0; i < 6; i++) {
for(int j = 0; j < 6; j++) {
if(i <= 3 && j <= 3) {
count = takeThreeByThreeMatrix(arr, i, j);
sum[counter++] = count;
}
}
}
System.out.println(findMaxArrayElement(sum));
}
private static int findMaxArrayElement(int[] sum) {
int max = 0;
for(int i = 0; i < sum.length; i++) {
if(max < sum[i]) {
max = sum[i];
}
}
return max;
}
private static int takeThreeByThreeMatrix(int [][] mat, int row, int column) {
int count = 0, cnt = 1;
for(int i = row; i < 3+row; i++) {
for(int j = column; j < 3+column; j++) {
if(cnt == 4 || cnt == 6) {}
else {
count += mat[i][j];
System.out.print(mat[i][j]+" ");
}
cnt++;
}
}
return count;
}
}
Sample Input:
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 9 2 -4 -4 0
0 0 0 -2 0 0
0 0 -1 -2 -4 0
Sample Output:
13
Sample Input:
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
Sample Output:
19
Comments
Post a Comment