チラシ裏日記上等!!新館

Webアプリケーションエンジニアの雑記帳。映画とかアニメとかの記事も書きます。

Atcoder日誌 AtCoder Beginners Selection をすすめる

前回のコンテスト初挑戦でクソザコナメクジっぷりが露呈したのでちゃんと練習からはじめていこうと思いました。まぁ本当のことをいうと毎週Beginnerのコンテストはやってると勘違いしてページに飛んだらやってなくて、どうしたもんかなと思ってはじめたんですけどね。

今回は初歩の初歩 AtCoder Beginners Selection をやりました。とりあえずCoinsまですすめました。

Shift Onlyまではすらすら行けたけど Coins でぴたっと止まってしまいました。coinsの問題は次です。

あなたは、500 円玉を A 枚、100 円玉を B 枚、50 円玉を C 枚持っています。 これらの硬貨の中から何枚かを選び、合計金額をちょうど X 円にする方法は何通りありますか。

早くも自分の限界の予感。いろいろ迷走してscipyを使うべきなのか?とか考えた結果、あんまり時間かけてもあれだしと思って他の方の回答を見てなんとか解けました。最終的にはt次のコードのようになりました。

# 500
m500 = int(input())
# 100
m100 = int(input())
# 50
m50 = int(input())
# total
x = int(input())
 
count = 0
 
for m500_count in range(m500 + 1):
    x1 = x - m500_count * 500
    for m100_count in range(m100 + 1):
        x2 = x1 - m100_count * 100
        if x2 >= 0 and x2 / 50 <= m50:
            count += 1
        
print(count)

1つずつ計算していってうまくいった計算結果だけをカウントしています。他の方の回答をみてなるほどわりと単純に書けるのかと感心すると共に自分の実力のなさに頭を抱えるばかりです。

Beginners Selectionはまだ半分ぐらい終わったぐらいなので残りの半分をまたあとでやろうかと思います。やりきったら過去問を解いたりして実力を養い、またBeginners Contestに再挑戦ですね。

早くクソザコナメクジを卒業したいものです。