문제
1043번: 거짓말
지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게
www.acmicpc.net
알고리즘
- set() 자료형을 통해 진실을 아는 사람과 파티에 참여하는 사람을 입력받는다.
- 파티의 수만큼 반복하여 파티에서 진실을 아는 사람이 포함되어 있는 파티를 찾는다. 파티의 수만큼 반복하는 이유는 모든 파티를 확인 후 진실을 아는 사람이 더 생길 경우 모든 파티를 한번 더 확인해줘야 하기 때문이다. 따라서 최대 파티의 수만큼 반복하여 진실을 아는 사람을 찾아야 한다.
- 반복문을 통해 각 파티의 참여한 사람을 확인하고 파티의 참여한 사람 중 진실을 아는 사람이 있는지 확인한다.
- 현재 파티에 진실을 아는 사람이 있다면 현재 파티에서는 진실을 말해야 하고 진실을 아는 사람의 집합에 현재 파티의 사람들을 추가한다.
- 모든 반복이 끝난 후 과장된 이야기를 해도 되는 파티의 수를 출력한다.
코드
import sys
n, m = map(int, sys.stdin.readline().split())
true_n = set(map(int, sys.stdin.readline().split()[1:])) # 진실을 아는 사람
# set() 자료형을 통해 파티에 참여하는 사람의 번호를 입력 받는다.
party = []
for _ in range(m):
party.append(set(map(int, sys.stdin.readline().split()[1:])))
# 파티의 수, False : 과장된 이야기, True : 진실된 이야기
cnt = [False] * m
# 파티의 수만큼 반복하여 파티에서 진실을 아는 사람이 포합되어 있는 파티를 찾는다.
for _ in range(m):
# 각 파티에 참여한 사람을 확인
for i, a in enumerate(party):
# 현재 파티에 참여한 사람과 진실을 아는 사람의 교집합이 있으면
if true_n & a:
cnt[i] = True # 현재 파티에서는 진실을 말해야 한다.
true_n = true_n | a # 진실을 아는 사람을 추가해준다.
print(cnt.count(False)) # 과장된 이야기를 할 수 있는 파티의 수
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 17219번(파이썬): 비밀번호 찾기 (0) | 2021.10.20 |
---|---|
[baekjoon] 백준 17608번(파이썬): 막대기 (0) | 2021.10.19 |
[baekjoon] 백준 2075번(파이썬): N번째 큰 수 (0) | 2021.10.17 |
[baekjoon] 백준 1525번(파이썬): 퍼즐 (0) | 2021.10.16 |
[baekjoon] 백준 1939번(파이썬): 중량제한 (0) | 2021.10.15 |