n이 주어지고 n * n개의 숫자가 주어진다.
이 숫자들안에서 기울어진 직사각형으로 돌며 값을 더할 때, 최대가 되는 값을 구하라.
도는 방향은 ↗️↖️↙️↘️이다.
↙️↖️
↘️↗️
즉, 위 모양처럼 직사각형의 모양을 띌 수 있다.
public static int find_sum(int i, int j){
int ret = 0;
for (int odd = 1; odd <= n; odd++){
for (int even = 1; even <= n; even++){
int sum = 0;
boolean valid = true;
int x = i;
int y = j;
// 1
for (int k = 0; k < odd; k++){
x--;
y++;
if (x < 0 || y >= n){
valid = false;
break;
}
sum += lst[x][y];
}
if (!valid)
continue;
// 2
for (int k = 0; k < even; k++){
x--;
y--;
if (x < 0 || y < 0){
valid = false;
break;
}
sum += lst[x][y];
}
if (!valid)
continue;
// 3
for (int k = 0; k < odd; k++){
x++;
y--;
if (x >= n || y < 0){
valid = false;
break;
}
sum += lst[x][y];
}
if (!valid)
continue;
// 4
for (int k = 0; k < even; k++){
x++;
y++;
if (x >= n || y >= n){
valid = false;
break;
}
sum += lst[x][y];
}
if (!valid)
continue;
ret = Math.max(sum, ret);
}
}
return ret;
}