[백준/파이썬] 1043 거짓말

#문제링크

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

 

1043번: 거짓말

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

www.acmicpc.net

#나의풀이

import sys

if __name__=="__main__":
    N, M = map(int, sys.stdin.readline().split())
    knowPeople = set(sys.stdin.readline().split()[1:])
    parties = []
    answer = 0
    for _ in range(M):
        tmp = list(sys.stdin.readline().split()[1:])
        parties.append(tmp)

    for _ in range(M):
        for party in parties:
            for human in party:
                if human in knowPeople:
                    knowPeople = knowPeople.union(party)

    for i in range(M):
        check = True
        for human in parties[i]:
            if human in knowPeople:
                check = False
                break
        if(check):
            answer += 1
    print(answer)

#해설

자바로는 많이 풀어본 유형이라 본 순간 파이썬으로는 어떻게 구현해야 할지 감이 잘 안왔는데 다른 사람들의 코드에서 간편한 코드가 있어서 참고했습니다.

진실을 알고 있는 사람들이 있고 모르는 사람들로 나뉘어져 있는데 진실을 알고 있는 사람들과 같은 파티에 속하게 된다면 그 사람도 진실을 아는자로 구분해서 풀면 되는 문제였습니다. 단순히 한번 반복문으로 진실을 아는 사람들을 체크하는것이 아닌 각 파티들을 돌때마다 모든 파티들을 다시 한번 체크해서 진실을 아는 사람들을 체크해주었습니다.