AtCoder Beginners Selection ABC085B – Kagami Mochiをpythonで解いてみた

本サイトABC085B – Kagami Mochiへは以下から

問題:Kagami Mochi

X 段重ねの鏡餅 (X≥1) とは、X 枚の円形の餅を縦に積み重ねたものであって、どの餅もその真下の餅より直径が小さい(一番下の餅を除く)もののことです。例えば、直径 10、8、6 センチメートルの餅をこの順に下から積み重ねると 3 段重ねの鏡餅になり、餅を一枚だけ置くと 1 段重ねの鏡餅になります。ダックスフンドのルンルンは N 枚の円形の餅を持っていて、そのうち i 枚目の餅の直径は di センチメートルです。これらの餅のうち一部または全部を使って鏡餅を作るとき、最大で何段重ねの鏡餅を作ることができるでしょうか。

制約

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

入力

入力は以下の形式で標準入力から与えられる。

N
d1
:
dN

出力

作ることのできる鏡餅の最大の段数を出力せよ。

入力例 1

4
10
8
8
6

出力例 1

3

直径 10、8、6 センチメートルの餅をこの順に下から積み重ねると 3 段重ねの鏡餅になり、これが最大です。

入力例 2

3
15
15
15

出力例 2

1

入力例 3

7
50
30
50
100
50
80
30

出力例 3

4

解答例

N = int(input())
d = [int(input()) for _ in range(N)]

unique_diameters = len(set(d))

print(unique_diameters)

解説


この問題は、与えられた餅の直径を使用して、最大の段数の鏡餅を作成することを求めています。餅の直径が同じ場合、それらは同じ段には積み重ねることができません。したがって、異なる直径の餅の数が鏡餅の最大の段数となります。

以下は、この問題を解くためのアプローチです。

  • 入力の受け取り:
    • int(input())を使用して、餅の枚数Nを受け取ります。
    • [int(input()) for _ in range(N)]を使用して、各餅の直径のリストdを受け取ります。
  • 異なる直径の餅の数の計算:
    • Pythonのsetを使用して、リストdの中のユニークな餅の直径の数を計算します。
  • 結果の出力:
    • ユニークな餅の直径の数(つまり、setの長さ)を出力します。

以下は、このアプローチを実装したPythonのコードです。

# 入力の受け取り
N = int(input())
d = [int(input()) for _ in range(N)]

# ユニークな餅の直径の数の計算
unique_diameters = len(set(d))

# 結果の出力
print(unique_diameters)

次の問題へ

前の問題へ

一覧へ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

■保有資格
Salesforce 認定 Platform アプリケーションビルダー
Salesforce 認定 Platform デベロッパー

コメント

コメントする

目次