ピクニック 2 (paizaランク B 相当)
解答例
最大値変数を用意し、区画を二次元配列にします。
レジャーシート左上基準で、区画を順に調べます。
レジャーシートに覆われた区画の価値の合計を求めて、最大値を超えるか比較します。
(小さな注意点:問題文のシートの大きさで変数にkを使うならば、ループで使う変数に、kを使わないようにします。地味にハマることがあります。const kとしておけば、気づけるので安全です)
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
const [n, m, k] = lines[0].split(" ").map(Number);
let max = 0;//区画の価値の合計の最大値
//区画を二次元配列に
const field = lines.slice(1).map(line => line.split(" ").map(Number));
//レジャーシート左上基準で、区画を順に調べていく
for (let i = 0; i <= n - k; i++) {
for (let j = 0; j <= m - k; j++) {
//区画の価値の合計を求める
let sum = 0;
//縦p(ループの変数にkを使わない)
for (let p = i; p < i + k && p < n; p++) {
//横q
for (let q = j; q < j + k && q < m; q++) {
sum += field[p][q];
}
}
//価値合計と今までの最大値比較
max = Math.max(max, sum);
}
}
console.log(max);