해결 과정
set을 활용해서 풀 수 있었던 문제. 처음에는 한 번만 돌면 되는 줄 알았으나, 그게 아니었음. 계속 돌면서 겹치는 것이 있는지 확인해야 하는 과정이 필요했다. 추가로 여러 조건들을 코드에 잘 녹여내야 최종적으로 정답을 맞출 수 있었음. ex) warning의 개수가 0인지 체크하는 과정 등
나의 풀이
N, M = map(int, input().split())
warning = set(list(map(int, input().split()))[1:])
if len(warning) == 0:
print(M)
else:
answer = 0
remain = []
isNew = True
tmpNum = len(warning)
for _ in range(M):
participant = list(map(int, input().split()))[1:]
if len(set(warning) & set(participant)) > 0:
warning |= set(participant)
else:
remain.append(participant)
if tmpNum == len(warning):
isNew = False
while remain and isNew:
tmpNum = len(remain)
for r in remain:
if len(set(warning) & set(r)) > 0:
isNew = True
warning |= set(r)
remain.remove(r)
if tmpNum == len(remain):
isNew = False
for p in remain:
if len(set(warning) & set(p)) == 0:
answer += 1
print(answer)
다른 풀이
IDEA
'Coding Test > 문제 풀이' 카테고리의 다른 글
[문제 풀이] 백준 18870 (0) | 2022.04.08 |
---|---|
[문제 풀이] 백준 1167 (0) | 2022.04.08 |
[문제 풀이] 백준 1149 (0) | 2022.04.08 |
[문제 풀이] 백준 5525 (0) | 2022.04.07 |
[문제 풀이] 백준 2579 (0) | 2022.04.07 |