Algorithm/acmicpc.net

실버 쯤이야 - 그래프의 재미 (1389번 케빈 베이컨)

winney916 2022. 3. 13. 17:36
728x90

#1389번 케빈 베이컨의 6단계 법칙 https://www.acmicpc.net/problem/1389

 

1389번: 케빈 베이컨의 6단계 법칙

첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻

www.acmicpc.net

 

확실히 문제가 안풀리는 날에는 문제 이해를 제대로 안한 경우가 많아서 속상하다.

 

신중에 신중을 기하는 내가 되길 바란다.

 

내 코드

from collections import deque
N, M = map(int, input().split())
network = [[] for _ in range(N+1)]
for _ in range(M):
    a, b = map(int, input().split())
    network[a].append(b)
    network[b].append(a)

answer = [0, N**2]  # person_number, cnt
# bfs
for p in range(1, N+1):  # 하나씩 bfs를 다 돌려야하나? 아니면 한번만 돌려서 할 수 있을까?
    que = deque()
    que.append([p, 0])
    visited = [False]*(N+1)
    visited[p] = True
    while que:
        x, cnt = que.popleft()
        for np in network[x]:
            if not visited[np]:
                visited[np] = cnt + 1
                que.append([np, cnt+1])
    visited[p] = 0
    result = sum(visited)
    answer = [p, result] if result < answer[1] else answer

print(answer[0])

BFS를 통해 구현했다. 모든 노드에서 출발하는 bfs를 전부 구현했기 때문에 시간초과가 나지 않을까 걱정됐지만 부드럽게 통과해서 기뻤다.

 

다른 사람의 코드도 비슷비슷해서 더 작성할 내용은 없다.

 

그동안의 풀이에서는 가볍게 풀린 문제는 기록하지 않았다.

 

하지만 이제 모두 기록하고자 한다. 기록한 문제가 더 기억에 남는 듯 하기 때문에...

 

화이팅이다.