LoginSignup
0
0

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 paizaの森練習問題コンテスト過去問題6 JavaScript 最大イニング

Last updated at Posted at 2022-10-22

最大イニング (paizaランク D 相当)

JavaScriptで解いてみました。
降板イニングをleaveとすると、初期値は1 ≦ i ≦ 9以外なら任意なので0とします。完投の時はleave = 0のまま、完投できなかったらleaveに降板イニングを記録することにします。
iイニングが終わった時点で、投げた球数がkを超えていたら、iイニングで降板します。降板イニングiをleave = iで記録します。

iイニング終了時、球数がkちょうどだったときに考えることがあります。

ちょうどイニングの終了時に k 球に到達した場合は、もうそのイニングが終了してしまい、投手を交代することができないため、次のイニング開始時に降板します。(入力例 3 のケース)

すなわち、投げ終わったイニングをiとするとleave = i + 1になります。
ただし、最終9イニングに球数がちょうどkに達したら、完投したことになり、leave = 0のままです。

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const k = Number(lines[0]);//球数制限 k

let numBall = 0;//球数
let leave = 0;//降板イニング、初期値は0とする
for (let i = 1; i <= 9; i++) {
  const m = Number(lines[i]);//i イニング目の球数を表す整数 m
  numBall += m;

  //イニングが終わったときの球数がk以上なら降板
  if (numBall > k) {
    leave = i;//降板イニング
    break;//降板

  //kちょうどのとき
  //9イニングじゃなかったら次のイニングで降板、9イニングだったら完投
  } else if (numBall === k && i !== 9) {
    leave = i + 1;//次のイニングで降板
    break;//降板 
  }
}
//完投できたか(leave初期値のままか)、できない場合は何イニングで降板か
console.log(leave === 0 ? "Yes" : leave);
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