ABC 212 A問題 Python解説

ABC212 A-Alloy

問題はこちら

Pythonでの解法】

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

A,B = map(int,input().split())
result = ["Gold", "Silver", "Alloy"]
ans = ""

if A > 0 and B == 0:
  ans = result[0]
elif A == 0 and B > 0:
  ans = result[1]
else:
  ans = result[2]

print(ans)

1. 問題文の把握

純金と純銀の量が与えられるので、混ぜて生成された金属が「純金」「純銀」「合金」のどれに該当するかを判定します。判定基準は問題文にある通りで、純銀の量が0なら「純金」、純金が0なら「純銀」、純金、純銀ともに0より大きい量であれば「合金」となります。

2. コードを考える

(0) 標準入力
スペース区切りで2つの文字列が与えられます。この文字列は後々、数値として扱うためint型にしておきます。そこで、map()を用いてintinput().split() をまとめて行い、2つの数値を変数A,Bにそれぞれ代入します。

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

(1) 下準備
今回の出力内容はGold,Silver,Alloyなので、これを要素とするリストresultを予め用意しておくこととします。さらに、この出力内容を代入する変数ansも空の状態で事前に用意します。
ここまでのコードは次の通りです。

A,B = map(int,input().split())
#以下が新規追加分
result = ["Gold", "Silver", "Alloy"]
ans = ""

(2) 根幹
問題文の条件の通りにif文を書いていきます。 0 \lt Aかつ B=0なら変数ansにreslut[0]を代入することでansにはGoldが格納されます。同様に、条件に応じてresult[1],result[2]をansに代入します。
尚、 0 \lt Aかつ 0 \lt Bの場合は条件式を書かずelseで事足ります。( 0 \lt A+Bという式があるため、A,B共に0ということはあり得ません。従って、「純金」「純銀」の条件以外は「合金」となります。)

A,B = map(int,input().split())
result = ["Gold", "Silver", "Alloy"]
ans = ""
#以下が新規追加分
if A > 0 and B == 0:
  ans = result[0]
elif A == 0 and B > 0:
  ans = result[1]
else:
  ans = result[2]

(3) 出力
変数ansにはGold,Silver,Alloyのいずれかが格納されているので、最後にansを出力しておしまいです。

A,B = map(int,input().split())
result = ["Gold", "Silver", "Alloy"]
ans = ""

if A > 0 and B == 0:
  ans = result[0]
elif A == 0 and B > 0:
  ans = result[1]
else:
  ans = result[2]
#以下が新規追加分
print(ans)

これで解答例のコードが完成しました!

3. まとめ

いかがでしたでしょうか?問題文も決して抽象的ではなく題意の把握は容易だったのではないでしょうか。
コードで用いる文法もif文が中心でしたので、書きやすかったはずです。
次回は引き続きABC212のB問題を扱う予定です。次回もお楽しみに!