ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

【AtCoder版!蟻本】ABC085 B - Kagami Mochi【set,map】

f:id:ebisuke33:20210621221915p:plain

AtCoder版!蟻本のset,mapの例題としてあげられているABC085 B - Kagami MochiをPythonで解いていきます。

B - Kagami Mochi

ABC085 B - Kagami Mochi

問題文

X 段重ねの鏡餅 (X≥1) とは、X 枚の円形の餅を縦に積み重ねたものであって、どの餅もその真下の餅より直径が小さい(一番下の餅を除く)もののことです。例えば、直径 10、8、6 センチメートルの餅をこの順に下から積み重ねると 3 段重ねの鏡餅になり、餅を一枚だけ置くと 1 段重ねの鏡餅になります。

ダックスフンドのルンルンは N 枚の円形の餅を持っていて、そのうち i 枚目の餅の直径は di センチメートルです。これらの餅のうち一部または全部を使って鏡餅を作るとき、最大で何段重ねの鏡餅を作ることができるでしょうか。

制約

・1≤N≤100
・1≤di≤100
・入力値はすべて整数である。

解答例

n = int(input())

D = set()
for i in range(n):
    d = int(input())
    D.add(d)

ans = len(D)

print(ans)

解説

N枚の餅から何段重ねの鏡餅を作ることができるか答える問題です。

同じ直径の餅は重ねることができませんので、set型を用いて重複した直径は無視します。
set型の集合Dへのデータの追加はaddを用いて行いました。

ループで集合Dへのデータ追加を終えると、すべて異なる直径が格納されています。

このDの要素の数が最大の鏡餅の段数になりますので、出力すればOKです。



AtCoder版!蟻本(初級編)の記事リンクページはこちら
ebisuke33.hatenablog.com