🎉
【AtCoder解説】ABC087B - Digits Sum を解いた記録
本記事は、AtCoder の問題を解いて得た知見を記録するための学習ログです。
毎回1問ずつ、「何を考えて解いたか」「どう実装したか」「学んだこと」を簡単にまとめていきます。
問題概要
500円玉、100円玉、50円玉からそれぞれ与えられた数から任意枚選び合計金額をちょうどX円にする方法が何通りあるか数える問題
解放とコード
a = int(input())
b = int(input())
c = int(input())
x = int(input())
sum = 0
count = 0
for i in range(a + 1):
for j in range(b + 1):
for k in range(c + 1):
sum = 500 * i + 100 * j + 50 * k
if(sum == x):
count += 1
sum = 0
else:
sum = 0
print(count)
3重ループにして解いた
解きながら考えたこと・学んだこと・感じたこと
- 時間がかかった
- 煩雑なコードだなと書きながら思った。
- range()が、イテレータが引数まで増えるのか、引数回繰り返すのかわからなくなった。実際は後者。
- やっぱり数学的解法が大事。
AIの評価
- sumはpythonの組み込み関数であるので使うべきでない
- sumは毎回更新しているので、sum = 0の初期化は最初以外はいらないし、else文移行もいらない
綺麗な回答
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):
total = 500 * i + 100 * j + 50 * k
if total == x:
count += 1
print(count)
全検索がセオリーのよう。
Discussion