見出し画像

AtCoder Beginners Selection のPythonでの答え

AtCoder公式の答えはC++によるものだったので、Pythonでの答えをここに置いておきます。

入力の方法などあまりにも初歩的なものは説明を省きます。まだ初歩的な部分が分からない人はPythonの初歩を学習してみてらこの問題に取り組んでみると良いと思います。(Pythonの学習にはこちらのサイトがおすすめです→https://algo-method.com/courses/36



ABC086A - Product

解答例

a, b = map(int, input().split())

if (a*b) % 2 == 0:
    print("Even")
else:
    print("Odd")

説明

まずは入力を行います。

If文を使用して、aとbをの積が偶数か奇数かを判断します。
ここでは、abを2で割り、余りが0かどうかを調べます。
もし余りが0であれば、abは偶数であり、"Even"という文字列が出力されます。もし余りが0でなければ、a*bは奇数であり、"Odd"という文字列が出力されます。


ABC081A - Placing Marbles

解答例

s = input()
count = 0

for digit in s:
  if digit =="1":
    count += 1

print(count)

説明

文字列 s の各文字に対してループを行い、その文字が "1" である場合には、count の値を 1 増やします。

最後に、count の値を出力して、数字 "1" の出現回数を表示します。


ABC081B - Shift only

解答例

n = int(input())
a = list(map(int, input().split()))

ans = 0
while all(x % 2 == 0 for x in a):
    ans += 1
    a = [x // 2 for x in a]

print(ans)

説明

ans という変数に 0 を代入します。while ループで、all(x % 2 == 0 for x in a) という条件式が成り立つ限り、以下の処理を繰り返します。

ans に 1 を加算します。
     ↓
     ↓      
・リスト a の各要素を 2 で割った結果を、リスト内包表記で新しいリストとして代入します。

すべての要素が偶数になると、条件式が False になり、ループから抜けます。最後に、ans を出力します。


ABC087B - Coins

解答例

A = int(input())
B = int(input())
C = int(input())
X = int(input())

count = 0


for i in range(A+1):
        for j in range(B+1):
            for k in range(C+1):
                if i*500 + j*100 + k*50 == X:
                    count += 1

print(count)

説明

3種類の硬貨(500円硬貨、100円硬貨、50円硬貨)を使って、合計がX円になるような組み合わせの数を求めます。
A, B, Cはそれぞれ、500円硬貨、100円硬貨、50円硬貨の最大枚数を表し、Xは合計金額を表します。

このプログラムでは、3重のforループが使われています。
i, j, kはそれぞれ、500円硬貨、100円硬貨、50円硬貨の枚数を表します。
i, j, kの値は、0から最大枚数(A, B, C)までの範囲を取ります。
つまり、全ての組み合わせを試すために、各硬貨の枚数を0から最大枚数まで順に変えながら、合計金額がX円になるかどうかを確認しています。

もし合計金額がX円になる場合は、countを1増やします。
最終的に、countの値が合計金額がX円になるような組み合わせの数になります。
最後に、countの値を出力します。


ABC083B - Some Sums

解答例

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

total = 0
for i in range(1, N+1):
    digit_sum = sum(map(int, str(i)))
    if A <= digit_sum <= B:
        total += i

print(total)

説明

1から N までの各整数について、以下の手順を実行します。

  1. i を文字列に変換して、各桁の数字の合計を計算します。

  2. digit_sumA 以上 B 以下の場合、 totali を加算します。

最後に、total を出力します。


ABC088B - Card Game for Two

解答例

N = int(input())
a = list(map(int,input().split()))

a.sort(reverse=True)

ans = [0,0]

for i in range(N):
  ans[i%2] += a[i]

print(ans[0] - ans[1])

解説

2 人とも自分の得点を最大化するように最適な戦略を取った時と問題文に記載されているので、それぞれ1番大きい値を順番にとっていくと良いことが分かります。

大きい値から順番にとるために、a.sort(reverse=True) というプログラムで、リストを降順にしています。
a.sortで昇順にすることができます。それをリバーシして降順にしているという理解で構いません

例えば[5, 9, 4, 6, 3]という配列が存在した場合はこんな感じです。

[5, 9, 4, 6, 3]
  ↓  sortで昇順に
  ↓
[3, 4, 5, 6, 9]
  ↓ reverseすることで昇順の逆、つまり降順に
  ↓
[9, 6, 5, 4, 3]

後はfor文を使用してそれぞれに大きい値をたし続けます。





この記事が気に入ったらサポートをしてみませんか?