AtCoder ABC 022 B – Bumble Bee Python解説

スポンサーリンク

Bumble Bee

高橋君はマルハナバチ(Bumblebee)という種類のミツバチです。
今日も花の蜜を求めて異なる N 個の花を訪れました。
i 番目の花は、i > jかつ i 番目の花の種類と j 番目の花の種類が同じになるような j が存在すれば受粉します。

高橋君が訪れた N 個の花の種類の情報が与えられるので、そのうちいくつの花が受粉したか求めてください。

AtCoder Beginner Contest 022「Bumble bee」

正攻法で考えると、連想配列を使い花の種類を保持していくやり方が思い浮かびますが、
今回はsetを使い、同じ花の種類を削除して削除前と削除後の要素数の差分で答えを求めたいと思います。

n = int(input())

a = [int(input()) for _ in range(n)]

b = len(a)
c = len(set(a))

print(b - c)

連想配列を使ったバージョン。こちらは配列をソートするのがポイントになります。
花の種類の配列aをソートすることにより、同じ数字なら連続して現れるので、1つ前の花の種類をa[i] == a[i-1]でチェックして同じ種類ならcnt+1することで正解に辿り着いています。

n = int(input())

a = [int(input()) for _ in range(n)]
a = sorted(a)
cnt = 0

for i in range(1, n):
    if a[i] == a[i - 1]:
        cnt += 1
        
print(cnt)