今回は paiza の「累積和の計算」の問題に挑戦!
新しいシリーズに突入!
🧩 問題概要
- 長さ
Nの数列Aが与えられる - 各
i(1〜N)について、先頭からi番目までの合計 を求める
入力
- 1行目:数列の長さ
N - 2行目:数列
A_1 ~ A_N
出力
-
S_1からS_Nまでを 1行ずつ出力
入力例:
10
0 1 2 3 4 5 6 7 8 9
出力例:
0
1
3
6
10
15
21
28
36
45
✅OK例:
const rl = require('readline').createInterface({ input: process.stdin });
const lines = [];
rl.on('line', (inputLine) => lines.push(inputLine));
rl.on('close', () => {
const N = Number(lines[0]);
const arrA = lines[1].split(' ').map(Number);
let prefixSum = 0; // 累積和
for (let i = 0; i < N; i++) {
prefixSum += arrA[i];
console.log(prefixSum);
}
});
🔍 コードの流れ
-
readlineを使って 標準入力を1行ずつ読み込む - 入力された各行を配列
linesに保存する - 入力がすべて読み終わったら
closeが呼ばれる
- 1行目から 数列の長さ
Nを取得する - 2行目から 数列
Aを配列arrAとして取得する
- 変数
prefixSumを0で初期化する
→ これが 累積和(今までの合計)
-
i = 0からN-1までループする-
arrA[i]をprefixSumに足す - 現在の累積和
prefixSumを出力する
-
📝まとめ
- 累積和:先頭からの合計を順に更新
- 毎回
A_1 + ... + A_iを計算し直さない -
prefixSum += A[i]が累積和の更新