Pythonで解くAtCoder(M-SOLUTIONS プロコンオープン 2020:A)
こんにちは、クルトンです!
この記事では
AtCoderの「M-SOLUTIONS プロコンオープン 2020」のA問題をPythonを使って解説します。
問題のリンクを載せておきます。
今回必要な知識
- input関数
- if文, elif文, else文
- print関数
input関数、print関数の使い方は下の記事で解説しています。
入力の受け取り方
まずint関数とinput関数を使って数値の入力を受け取ります。
X = int(input())
このように、input関数で受け取った文字列をint関数を使って文字列から整数に変換することで、数値の入力を受け取ることができます。
ではここからは解法について説明します。
簡単な解法
条件をそのまま、if, elif, else文を使って書きます。
では、軽くif, elif, else文について説明します。
if 条件式:
処理
if文では、条件式が真であると処理が実行されます。
また、条件式が偽であれば処理は実行されません。
次にelse文についてですが
if 条件式: 処理1 else: 処理2
このとき、条件式が真であれば上の場合と同様に処理1が実行されます。
しかしelse文があると、条件式が偽であれば処理2が実行されます。
最後にelif文についてですが
if 条件式1: 処理1 elif 条件式2: 処理2 elif 条件式3: 処理3 elif 条件式4: 処理4 else: 処理
このようにelif文を使うと、条件式を増やすことができます。
このときは、条件式1が真であれば処理1が実行され、そうでなければ条件式2に移動します。
そして条件式2が真であれば処理2が実行され、そうでなければ条件式3に移動する...ということを繰り返します。
そしてすべての条件式が偽であった場合は、else文の処理が実行されます。
以上がざっくりとしたif, elif, else文の説明になります。
では実際に解答を書いていきましょう。
まず、レートが400以上599以下であれば8級なので
if 400 <= X < 600: print(8)
となります。
ここにelif文を使って条件式を追加していきます。
if 400 <= X < 600: print(8) elif 600 <= X < 800: print(7)
これを繰り返していけばいいのですが、少し面倒です。どうにかして書く量を減らせないでしょうか...?
そこで少し考えてみると600以上という条件はいらないことに気が付きます。
なぜなら600以上でないならば400 <= X < 600が真になるからです。
このことと、Xが400以上であるという問題文の制約を利用すると
if X < 600: print(8) elif X <= 799: print(7)
このように記述量を減らすことができます。
また、最後をelse文にしておくことで条件式を一つ減らすことができます。
以下にサンプルコードを載せておきます
少し難しい解法
レートと級の関係について考えてみると、レートが200増えると級が一つ減ることがわかります。
このことから、レートを200で割った商を使うという解法が思いつきます。
いろいろ計算して試してみると
10 - [X / 200]
が答えとなることがわかります。("[]"はガウス記号という少数以下を切り捨てる記号です。)
pythonでは「//」という演算子を使うことで商をもとめることができます。
以下にサンプルコードを載せておきます
まとめ
今回は
- if, elif, else文を使う
- レートと級の関係に気づく
という問題でした。
レートと級の関係に気づけなかったとしても、if, elif, else文を用いれば解ける問題なのでしっかりと解けるようになっておきましょう!
ではまたお会いしましょう!さようなら~