全事象について考える
本日は、競技プログラミングを学習していく上で、
「この考え方大事だな」と思ったことについて記事にしていきたいと思います。
皆さんの学習の助けになったら、幸いです。
本日のトピック
AtCoder Beginner 208 のA問題
A問題
A - Rolling Dice
ふむふむ
サイコロを1回振ったときに、出せる数字の最大値は6
サイコロを2回振ったときに、出せる数字の最大値は12
サイコロをA回振ったときに、出せる数字の最大値はA*6
よってコードは
「Aを6倍した値が、Bよりも大きかったら、"Yes", それ以外は、"No"」だと思い、下記コード
A, B = map(int, input().split())
deme = A*6
if deme >= b:
print("Yes")
else:
print("No")
がしかし、結果は、【WA】(間違っているよ)
「なぜだ!!」
絶対コードは合っているし、サンプルデータもちゃんと出力できているのに!
哀川はパニック!
全事象について考えましょう
こーゆー時は、紙に全通り書き出すことに限る。
サイコロを1回振る時の全通り
[1,2,3,4,5,6]
サイコロを2回振る時の全通り
[2,3,4,5,6,7,8,9,10,11,12]
「あ」
よく考えたら、サイコロを2回振る時、Bの値は、2以上じゃないとだめ。
つまり
A回振る時の出目をBとすると「BはAよりも大きい値」にならないとだめ
なので、コードは
A, B = map(int, input().split())
deme = A*6
if deme < b:
print("No")
elif A > b:
print("No")
else:
print("Yes")
これで、無事 【AC】(問題ないよ)
気づけてよかった・・・・・
今回の反省と次回までの目標
A問題に20分近くかかってしまった・・・
今回はC問題まで正答できたから、かなり悔しい。
次回の目標は、60分以内にC問題まで完答!
この記事が気に入ったらサポートをしてみませんか?