본문 바로가기

알고리즘/백준

[백준] 1043번 : 거짓말

728x90

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

 

1043번: 거짓말

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

www.acmicpc.net

해당 문제는 파티리스트들을 2번 스캔 해야합니다.

진실을 알고 있는 사람과 같은 파티에 참석할 경우 해당하는 파티원들은 모두 진실만 들을 수 있습니다.

따라서 파티 리스트들을 한번 스캔하는데 진실을 알고있는 사람들의 그룹을 만듭니다. ( 파이썬 set 자료구조 사용 )

두번째 스캔에는 파티원들 모두 진실을 알고 있는 그룹에 속하지 않아야 지민이는 거짓말을 할 수 있습니다.

 

 

N, M = map(int, input().split()) 
graph = list(map(int, input().split()))

truthPeopleCount = graph[0]
truthPeopleList = set(graph[1:])

partyList = [list(map(int, input().split()))[1:] for _ in range(M)]

updated = True
while updated:
    updated = False
    for party in partyList:
        if any(person in truthPeopleList for person in party):
            if not truthPeopleList.issuperset(party): # 새로운 사람을 추가하는지 확인
                truthPeopleList = truthPeopleList.union(party)
                updated = True

counter = sum(1 for party in partyList if not any(person in truthPeopleList for person in party))
print(counter)
728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1937번 : 욕심쟁이 판다  (0) 2023.08.24
[백준] 1967번 : 트리의 지름  (0) 2023.08.22
[백준] 1976번 : 여행 가자  (0) 2023.08.21
[백준] 1717번 : 집합의 표현  (0) 2023.08.21
[백준] 9466번 : 텀 프로젝트  (0) 2023.08.21