[백준] 1043 : 거짓말 - Python

Chooooo·2023년 2월 2일
0

알고리즘/백준

목록 보기
34/182

import sys
from collections import deque
import heapq as hq
sys.stdin = open("input.text", "rt")
# input = sys.stdin.readline

# 자료구조

N, M = map(int, input().split())
know = list(map(int, input().split()))[1:] #진실을 하는 사람의 수는 필요 없으니 슬라이싱.

visit = [0] * N
for i in know:
    visit[i-1] = 1  #1부터 시작이라 + 아는 사람들은 1로 표기


#파티 해당 데이터에 know의 인덱스가 포함되어 있다면 그 파티 구성원은 거짓말을 할 수 없음

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

party_visit = [0] * M #진실을 말해야 하는 파티는 1로 표기

#스택이 빌 때까지 반복
while know:
    know_person = know.pop()

    data = set()  #진실을 아는 pop된 사람들과 같은 파티에 있는 사람들 담을려고

    #pop된 사람과 같은 파티에 있는 사람들을 찾아 집합에 추가
    for i in range(len(party)):
        temp = set(party[i])  #각 파티별로 중복 제거
        if know_person in temp: #pop된 사람이 현재 파티일 경우
            data = data.union(temp)  #현재 파티 사람들 집합에 추가
            party_visit[i] = 1 #현재 파티를 진실을 말해야 하는 파티라고 표기
    
    #찾은 사람들 중 스택에 추가된 적이 없는 사람들을 스택에 추가
    for i in data:  #진실을 아는 사람들 중에 스택에 없으면 추가
        if visit[i-1] == 0:
            know.append(i) #해당 인덱스 안다고 표시
            visit[i-1] = 1   

print(party_visit.count(0))

🎈 코멘트
해당 문제는 스택을 통해 빌 때까지 반복하면서 인덱스 값이 0인 것의 개수를 찾았으면 됐어. 표현 익히기.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글