본문 바로가기
알고리즘

Python - 거짓말 (1043)

by jun.s.gi 2023. 5. 30.
728x90

https://www.acmicpc.net/problem/1043

 

1043번: 거짓말

지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게

www.acmicpc.net

 

 

1. 집합 클래스 사용

 - 진실을 알고있는 사람과 파티에 참석하는 사람의 교집합 요소의 개수가 하나라도 있으면 진실을 알고있는 사람들 집합에 합칩니다.

import sys

n, m = map(int, sys.stdin.readline().strip().split())
fact = set(list(map(int, sys.stdin.readline().strip().split()))[1:])
party = []
for _ in range(m):
    party.append(set(list(map(int, sys.stdin.readline().strip().split()))[1:]))

if len(fact) == 0:
    print(m)
else:
    for _ in range(m):
        for p in party:
            # 진실을 알고있는 사람들의 집합과 파티에 참석하는 사람들 집합의 교집합에 한 명이라도 있으면
            if fact.intersection(p):
                fact = fact.union(p) # 합침
    ans = 0
    for p in party:
        if not (fact & p):
            ans += 1
    print(ans)

 

728x90