AtCoder Beginner Contest 209 A問題 Python解説

ABC209 A-Counting

問題はこちら

Pythonでの解法】

まず解答例を下に示します。

A,B = map(int,input().split())
if A < B:
  print(B - A + 1)
else:
  print(0)

1. 問題文の把握

本問はとても簡潔な問題文になっております。A以上B以下の整数の個数を考えるだけです。

2. コードを考える

(0) 標準入力
半角スペースで区切られた二つの整数を変数AとBに代入します。この際、map()を使うことでintinput().split()を同時に使うことができます。

A,B = map(int,input().split())

(1) 根幹
入力例1で出力される3は4-2+1によって算出されることが分かると思います。4-2では「3」と「4」しか拾えません。本問はA以上とあるので、+1を行います。 入力例2を見てみても100-90+1=91となっており、式が成り立つことが確認できます。 すると、次のようなコードが考えられます。

A,B = map(int,input().split())
#以下が新規追加分
print(B - A + 1)

(2) 入力例3を考える
ところが入力例3を見てみると、該当する整数が一つも存在しないケースがあることに気付かされます。そうです。これまでに入力例はA<B となっていたのに対し、A>Bの場合は「A以上B以下の整数」というものが存在しません。また、AとBが等しい場合も該当する整数の個数は0 となります。 そこで、if文を使って場合分けを行います。

A,B = map(int,input().split())
#if文による場合分け
if A < B:
  print(B - A + 1)
else:
  print(0)

これで上述の解答例が完成しました!

(3) より短く書いてみる
(2)まででも良いのですが、別解として最初に示した解答例より短く書く例も下に示したいと思います。(余力のある方、興味のある方はお読み下さい)

A,B = map(int,input().split())
#if文を1行にした
print(B - A + 1 if A < B else 0)

print()の中に
if文の条件式がTrueの時の出力内容、if、条件式、else、条件式がFalseの時の出力内容の順に書くことで1行にまとめることができますのでご紹介しておきます。(三項演算子を用いた記述)
この2行(コメントを除いた2行)だけでもACとなりますので、試してみて下さい。
初めは書き方や順番に戸惑うかもしれませんが、慣れてくると簡潔に書けることに快感を覚えるようになると思います。詳細が気になる方は是非「Python 三項演算子」で調べてみて下さい!

3. まとめ

前回に引き続き今回も、思考の流れを噛み砕くイメージで段階的にコードを書いていくことを意識して解説してみましたが、いかがでしたでしょうか?整数という言葉さえ知っていれば、題意の把握は容易な問題ではなかったでしょうか。あとは、いかにコードに落とし込めるかが今回のポイントだったと思います。
それでは、また次回の記事もぜひご期待下さい。