【JavaScript】Paizaのスキルチェック過去問(難易度C)にチャレンジ①

PaizaのC問題相当のレベルアップ問題集の解説記事を作成しました。

問題の参考リンクはこちらからどうぞ。

今回はこの問題集の中から野球の審判について解説しています。

難易度は1250前後、正答率が約80%の問題です(C問題の中ではやや簡単めの難易度です)。

問題文と入力出力例

野球の各打者はストライクが 3 つたまるとアウトとなり、ボールが 4 つたまるとフォアボールとなります。
アウトあるいはフォアボールになると、この打者の番は終了します。

あなたはストライクとボールを判定してコールする審判です。
その場の状況に合わせて適切なコールを出しましょう。

最終的にこの打者にはアウトかフォアボールのいずれかが必ず与えられ、それ以降の投球はおこなわれません。

入力例
5
ball
strike
ball
strike
strike

出力例
ball!
strike!
ball!
strike!
out!

解説

間違った考え方

  const N = Number(lines[0]);
  
  let strikeCount = 0;
  let ballCount = 0;
  
  for(let i = 1; i <= N; i++) {
      if (lines[i] === "ball") {
          ballCount++;
          console.log("ball!");
          if (ballCount === 4) {
              console.log("fourball!")
          }
      }
  }

※全てballであると仮定して作ったコードです。

letでカウンターを設置して、ballならば足していき、4回目でfourball!と出力できそうなコードです。

しかし、このコードの場合、4回目でもball!と出てきて、ついでにfourball!と出力されてしまいます。

正しい考え方

この場合は、count総数が4ならばfourball!、4でないならball!と出力すればいいです。

for文章だけ抜粋すると以下のようになります。

  for(let i = 1; i <= N; i++) {
      if (lines[i] === "ball") {
          ballCount++;
          if (ballCount === 4) {
              console.log("fourball!");
          } else {
              console.log("ball!");
      } 
  }

strikeでも数値が変わるだけでほぼ同じ考え方でコードを書くことができます。

全体のおさらいコード

 const N = Number(lines[0]);
  
  let strikeCount = 0;
  let ballCount = 0;


 for(let i = 1; i <= N; i++) {
      if (lines[i] === "ball") {
          ballCount++;
          if (ballCount === 4) {
              console.log("fourball!");
          } else {
              console.log("ball!");
          }
}

      if (lines[i] === "strike") {
          strikeCount++;
          if (strikeCount === 3) {
              console.log("out!");
          } else {
              console.log("strike!");
          } 
  }
  
 }
タイトルとURLをコピーしました