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!");
}
}
}
