-
Notifications
You must be signed in to change notification settings - Fork 0
/
Arrays2D.java
107 lines (90 loc) · 2.18 KB
/
Arrays2D.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// https://www.hackerrank.com/challenges/30-2d-arrays
import java.util.Scanner;
import java.util.Arrays;
/*
sample input/output
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
19
sample input/output
0 -4 -6 0 -7 -6
-1 -2 -6 -8 -3 -1
-8 -4 -2 -8 -8 -6
-3 -1 -2 -5 -7 -4
-3 -5 -3 -6 -6 -6
-3 -6 0 -8 -6 -7
-19
sample input/output
-1 -1 0 -9 -2 -2
-2 -1 -6 -8 -2 -5
-1 -1 -1 -2 -3 -4
-1 -9 -2 -4 -4 -5
-7 -3 -3 -2 -9 -9
-1 -3 -1 -2 -4 -5
-6
*/
public class Arrays2D {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int arr[][] = new int[6][6];
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
arr[i][j] = in.nextInt();
}
}
// initialize -ve number for -ve hourglass sums
int max = -1000;
for (int i = 0; i < arr.length; i++) {
int[] row = arr[i];
for (int j = 0; j < row.length; j++) {
// System.out.println("i : "+i+" j "+j);
if(i <= arr.length-3 && j <= row.length-3) {
// finding 3X3 sub matrix
int[][] subMat = subSet(arr, i, j, 3, 3);
for (int[] sub : subMat) {
System.out.println(Arrays.toString(sub));
}
int sum = maxHourGlass(subMat);
System.out.println("sum : "+sum);
System.out.println();
if(max < sum)
max = sum;
}
}
}
System.out.println(max);
in.close();
}
// to find the sum of hour glass matrix from submatrix
public static int maxHourGlass(int[][] matrix) {
int sum = 0;
for (int i = 0; i < matrix.length; i++) {
int[] row = matrix[i];
for (int j = 0; j < row.length; j++) {
// other than middle row i.e 2nd row every element is summed up
if((i != matrix.length-2 && j != 0) || (i != matrix.length-2 && j!= matrix.length-1)) {
// System.out.println("i "+i+" j "+j);
sum = sum + matrix[i][j];
} else if( i == j) {
// for the diagonal element
sum = sum + matrix[i][j];
}
}
}
return sum;
}
// to find the 3 by 3 sub matrix
public static int[][] subSet(int[][] matrix, int x, int y, int row, int col) {
int[][] a = new int[row][col];
int j = 0;
for (int i = x; i < x + row; i++) {
a[j] = Arrays.copyOfRange(matrix[i], y, y + col);
j++;
}
return a;
}
}