For Programmer

백준 1389번 파이썬 문제풀이(케빈 베이컨의 6단계 법칙) 본문

코팅테스트/백준 문제 모음

백준 1389번 파이썬 문제풀이(케빈 베이컨의 6단계 법칙)

유지광이 2022. 3. 21. 20:54
728x90


간단히 각 점에서 부터 bfs돌면서 각각 노드마다 거리를 계산해서 계속 더해주면 된다. 단, 이문제는 dfs로는 풀 수 없고 bfs로 풀어야하는 문제라는 것만 유의하면 된다. 또한 한가지 더 유의할 점이 관계가 중복돼서 제공될 수 있기 때문에 관계를 저장할 때 리스트가 아닌 셋으로 저장했다.

 

from collections import deque

N, M = map(int, input().split())
graph = [set() for _ in range(N + 1)]
for i in range(M):
    a, b = map(int, input().split())
    graph[a].add(b)
    graph[b].add(a)

bacon = []  # 베이컨 수 저장


def bfs(v):
    global result
    visited[v] = True
    queue = deque([[v, 0]])

    while queue:

        start, count = queue.popleft()
        result += count
        for i in graph[start]:
            if not visited[i]:
                visited[i] = True
                queue.append([i, count + 1])


for i in range(1, N + 1):
    visited = [False] * (N + 1)
    result = 0
    bfs(i)
    bacon.append(result)

print(bacon.index(min(bacon)) + 1)
728x90
Comments