알고리즘/DFS | BFS

파이썬 | 백준 | 5567 | 결혼식

cha-n 2020. 8. 28. 00:02

solution

친구의 친구 : 두 학번 사이의 거리가 2 이내여야 한다.

# 5567, 결혼식
import sys
from collections import deque

def bfs(x):
    visited = [0] * n
    visited[x] = 1
    q.append(x)
    while q:
        x = q.popleft()
        for i in friends[x]:
            if not visited[i]:
                visited[i] = visited[x] + 1
                q.append(i)
    return visited


n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
friends = [[] for _ in range(n)]

for _ in range(m):
    a, b = map(int, sys.stdin.readline().split())
    friends[a-1].append(b-1)
    friends[b-1].append(a-1)

q = deque()
cnt = 0

res = bfs(0)
for res_ in res:
    if 1 < res_ <= 3:   # 1 : 본인, 2 : 친구, 3 : 친구의 친구
        cnt += 1
print(cnt)

31928KB

92ms

 

문제 출처 https://www.acmicpc.net/problem/5567

 

5567번: 결혼식

2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2,3,4 3명의 친구를 결혼식에 초대한다.

www.acmicpc.net