この記事では
プログラミング学習サービスpaizaラーニングの
スキルチェック見本問題をわかりやすく解説します!
プログラミング言語はpythonです。
今回はCランク相当の以下の問題を解説します。
他のレベルアップ問題集の解答と解説も紹介しているのでぜひご参考ください!
またpaizaの各ランクの攻略法は
こちらで詳しく紹介しているので、ぜひご参考ください!
Fizz Buzz (paizaランク C 相当)の解答と解説
今回の問題は「Fizz Buzz (paizaランク C 相当)」です。
問題はこちらからご確認ください。
この問題を解くのに必要な知識は5つです。
- 入力を受け取る
- str型からint型に変換
- 1から順番に整数を出力
- 倍数かどうかで条件を課す
- 適切な順番で条件分岐
この記事では、上記の5つの中で
- 1から順番に整数を出力する
- 指定された値の倍数かどうかで条件を課す
- 適切な順番で条件分岐を行う
の3つを詳しく解説します。
残りの
については、以下の記事をご参考ください!
1から順番に整数を表示
まずは「1から順番に整数を表示」です。
今回の問題は、入力された値までの整数を1から順番に出力し
その値に対して条件分岐を行います。
そのため「1から順番に整数を表示する」処理が必要です。
この処理はrange関数とfor文を使って、以下のように書けます!
# 入力を受取り、int型に変換
N = int(input())
# N回処理を繰り返す
for num in range(N):
# numに1を加える
print(num+1)
"""
1から順番に整数を出力
1
2
3
︙
N
"""
繰り返す数値num
は0から始まるため
1を加えるのを忘れないようにしましょう!
for文については、こちらをご参考ください!
倍数かどうかで条件を課す
次は「倍数かどうかで条件を課す」です。
今回の問題では出力する値が
- 3の倍数
- 5の倍数
- 3の倍数かつ5の倍数
のいずれかの場合に対して条件分岐が必要です。
「ある値の倍数」は、「ある値で割り切れる」と言い換えられるので
%
を使って、割り算の余りを計算し条件を課します。
# 3の倍数の条件
num % 3 == 0
では「3の倍数かつ5の倍数」の条件はどのように書けばいいでしょうか。
今回の場合3と5の最小公倍数は15であるため
15で割り切れるかが条件になります。
# 3の倍数かつ5の倍数の条件
num % 15 == 0
また「最小公倍数を考えるのが面倒」な方は
「3の倍数」と「5の倍数」の条件を
and演算子を使って掛け合わしても問題ありません。
# 3の倍数かつ5の倍数の条件
num % 3 == 0 and num % 5 == 0
割り算などの四則演算については、こちらをご参考ください!
適切な順番で条件分岐
次は「適切な順番で条件分岐」です。
今回の問題では出力する値が
- 3の倍数
- 5の倍数
- 3の倍数かつ5の倍数
のいずれかの場合に対して条件分岐を行います。
条件分岐はif elif else文を使いますが
ここで重要なのが条件を課す順番です。
複数の条件を課す時は、
先に「限定的な(狭い)条件」から課すようにしましょう。
今回の問題だと
最も限定的なのが「3の倍数かつ5の倍数」
その次に「3の倍数」と「5の倍数」です。
# 3の倍数かつ5の倍数
if num % 15 == 0:
print("Fizz Buzz")
# 3の倍数
elif num % 3 == 0:
print("Fizz")
# 5の倍数
elif num % 5 == 0:
print("Buzz")
# その他
else:
print(num)
もし「3の倍数」や「5の倍数」の条件を先に課してしまうと
当然「3の倍数かつ5の倍数」の場合も含まれてしまうので
正しく出力されません。
# 3の倍数
if num % 3 == 0:
# 3の倍数かつ5の倍数ときも出力されてしまう
print("Fizz")
# 3の倍数かつ5の倍数
elif num % 15 == 0:
# 出力されない
print("Fizz Buzz")
# 5の倍数
elif num % 5 == 0:
print("Buzz")
# その他
else:
print(num)
条件を課す順番はif文を使う時にエラーを起こしやすいポイントの1つです。
必ず注意するようにしましょう!
if文については、こちらをご参考ください!
Fizz Buzz (paizaランク C 相当)の解答
まとめると「Fizz Buzz (paizaランク C 相当)」の解答は以下です。
# 入力を受取り、int型に変換
N = int(input())
# N回処理を繰り返す
for num in range(N):
# 1を加える
num += 1
# 3の倍数かつ15の倍数
if num % 15 == 0:
print("Fizz Buzz")
# 3の倍数
elif num % 3 == 0:
print("Fizz")
# 5の倍数
elif num % 5 == 0:
print("Buzz")
# その他
else:
print(num)
この問題では、「for文とif文の組み合わせ」が必要になりました。
しかしここまで解説したように、処理を分割し一つ一つを見ていくと
基本通りの内容で特に難しいものは無かったと思います。
ぜひ他の問題も処理の流れをイメージし
分割した上で問題に取り組んでいきましょう!
まとめ
今回はpaizaのスキルチェック見本問題の中で
- Fizz Buzz (paizaランク C 相当)
の解答と解説を紹介しました。
Cランクの問題からは必ずif文またはfor文が登場し
Dランクの問題に比べて、コードが複雑になります。
そのためコードを書き始める前に
頭の中で処理の流れをイメージをしてから書いていくのがおすすめです!
また他のレベルアップ問題集の問題についての解説も、ぜひご参考ください!