AtCoder Beginner Contest 210 A問題 Python解説

ABC210 A-Cabbages

問題はこちら

Pythonでの解法】

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

N,A,X,Y = map(int,input().split())
ans = 0

for i in range(N):
  if i < A:
    ans += X
  else:
    ans += Y

print(ans)

1. 問題文の把握

題意は簡潔です。全部でキャベツをN個買います。その時に必要な金額を求めます。
但し価格に注意が必要で、A個目までは1個X円、A+1個目からは1個Y円で買うことができます。 本問ではN,A,X,Yという4つの値が与えられるので、それぞれの数字が何を意味しているかを正しく把握する必要があります。

2. コードを考える

(0) 標準入力
4つの変数それぞれに標準入力で受け取ったデータを整数にし代入するので map(int,input().split())を使います。

(1) 準備
本問は金額の出力が求められています。そこで、N,A,X,Yとは異なる新たな変数を用意する必要が出てきます。 今回の解答例では変数ansを用意し、初期値として0を設定します。後は、この変数ansにキャベツの購入価格を加算していくだけになります。
(0)標準入力と合わせて、まずは次のコードを書いていきます。

N,A,X,Y = map(int,input().split())
ans = 0

これで下準備は終了です。

(2) 根幹
変数ansにN回だけ、価格を加算していくのでfor文を使います。さらに、A個目までか否かによって価格が異なるのでfor文の中にif文を書いていきます。
つまり、次のようなコードとなります。

N,A,X,Y = map(int,input().split())
ans = 0
#以下が新規追加分
for i in range(N):
  if i < A:
    ans += X
  else:
    ans += Y

ここでは、if文の条件式i < Aに注意が必要です。A個目まではX円買うことができても条件式の不等号に=は付きません。
入力例1をもとに考えてみます。Nが5、Aが3と与えられますので、5個のうちはじめの3個までがX(20)円で買うことができます。この時、for i in range(5):iには0から始まり1,2,3,4と代入されていきます。つまり、はじめの3個に対応するiは0,1,2となる訳です。 そこで、条件式ではiは3(A)未満(3より小さい)と書くことになります。対応関係を表として下に示します。

何個目? i 価格
1 0 X
2 1 X
3 2 X
4 3 Y
5 4 Y

(3) 出力
繰り返し処理が終わった後の変数ansの値が「キャベツを N 個買うために必要な金額」となりますので、print()を書いて完成になります!

N,A,X,Y = map(int,input().split())
ans = 0

for i in range(N):
  if i < A:
    ans += X
  else:
    ans += Y
#以下が新規追加分
print(ans)

3. まとめ

いかがでしたでしょうか?
競技プログラミングを始めたばかりの方にとっては、まず自分で変数を用意するということがポイントだったと思います。これは、慣れてくればスムーズにできるようになると思います。
また、for文の条件式における繰り返し変数iにも注意が必要でした。もやもやする、スッキリしない人は別の入力例や自分で設定した入力例の対応関係などを紙に書いて整理してみると良いと思います。
今回も最後までお読みいただきありがとうございました。