[Python] 백준 1043_ 거짓말

채수빈·2022년 1월 4일
1

백준 알고리즘

목록 보기
18/21

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

이 문제는 집합(set())을 이용하여 문제를 풀면 된다.

집합에서 다음의 메소드를 알아두자.

  • add(): 집합에 원소 추가
  • update(): 집합에 원소 여러개 추가
  • set.union(a,b): a와 b집합의 합집합
    =a|b
  • set.intersection(a,b): a와 b집합의 교집합
    =a&b
  • set.difference(a,b): a와 b집합의 차집합
    =a-b

코드

import sys
input = sys.stdin.readline

n, m =map(int,input().split()) #사람 수, 파티 수 
know=set(input().split()[1:])
pnum=[]
cnt = 0

#파티 참가 정보 등록 
for i in range(m):
    pnum.append(set(input().split()[1:]))

#진실을 아는 사람 정보 등록 
for i in range(m):
    for party in pnum:
        if party &know: #진실을 아는 사람이 겹치면 know에 추가(교집합) 
            know.update(party) #집합에 여러개를 추가할때는 update함수 사용!      

for i in range(m):
    for t in pnum[i]:
        if t in know: #진실을 아는 사람이 있을 경우 cnt+=1
            cnt+=1
            break
print(m-cnt) #전체에서 진실만을 말해야하는 경우를 뺀다.
profile
웹 프로그래밍과 알고리즘 공부👩🏻‍💻

0개의 댓글