LoginSignup
0
0

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript ピクニック 2

Posted at

ピクニック 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);
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0