AtCoder ABC 118 B – Foods Loved by Everyone Python解説

スポンサーリンク

Foods Loved by Everyone

カツサンドくんはオムライスが好きです。

他にも明太子や寿司、クリームブリュレやテンダーロインステーキなどが好きで、これらの食べ物は全て、誰もが好きだと信じています。
その仮説を証明するために、N 人の人に M 種類の食べ物について好きか嫌いかの調査を行いました。

N 人全ての人が好きだと答えた食べ物の種類数を求めてください。

AtCoder Beginner Contest 「Foods Loved by Everyone」

N人すべての人が好きだと答えた食べ物の種類数を求めていきます。
各食べ物について、好きだと答えた人数をカウントしていき、好きだと答えた人数=N人となったらすべての人が好きだと答えたことになります。

それぞれの食べ物とカウント数を保持したいので連想配列で実装していきます。

n, m = map(int, input().split())

dic = {}
ans = 0

for _ in range(n):
    a = input().split()
    for i in range(1, int(a[0]) + 1):
        if a[i] in dic:
            dic[a[i]] += 1
        else:
            dic[a[i]] = 1
            
        if dic[a[i]] == n:
            ans += 1
            
print(ans)

内側のループでは、受け取った好きな物の種類が連想配列に入っているかチェックします。連想配列の中にあればカウントアップしていき、最終的にカウントがNとイコールになったら、 すべての人が好きな食べ物の種類数を+1します。最後に好きな食べ物の種類数を出力して完了です。

AtCoderB問題

Posted by cheese