본문 바로가기
알고리즘/baekjoon

[알고리즘/baekjoon] 1389_케빈 베이컨의 6단계 법칙(python)

by 천뿌니 2021. 11. 25.
728x90

문제

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

# 가장 작은 or 가장 짧은 or 가장 빠른하면 bfs를 생각하자(deque)
# list.index(value) 하면 value에 맞는 인덱스가 나온다.
 
정답
from collections import deque

def bfs(i): 
  visited = [0] * (n+1) # 첫번째 사람부터 n번째 사람까지 visited가 다르기 때문에 사람마다 visited를 다르게 설정해주기 위해 함수안에 선언
  q = deque()
  q.append(i)
  visited[i] = 1 # i번째 사람은 시작이니깐 1로 설정

  while q:
    x = q.popleft()
    for v in graph[x]: # 연결되어 있는 노드들을 하나씩 방문한다.
      if visited[v] == 0: # v를 방문하지 않았다면
        visited[v] = visited[x] + 1 # 1칸 건너일때마다 1씩 증가
        q.append(v) # q에 추가
  
  return sum(visited) # i번째 사람의 케빈 베이컨의 수의 합

n, m = map(int, input().split())
graph = [[] for _ in range(n+1)]
result = []

for _ in range(m):
  a, b = map(int, input().split())
  graph[a].append(b)
  graph[b].append(a)

for i in range(1,n+1):
  result.append(bfs(i)) # result에 첫 번째~ n번 째 사람까지의 케빈 베이컨의 수의 합이 저장

print(result.index(min(result))+1) # 수가 가장 작은 사람의 인덱스를 뽑고 몇 번째 인지 알기 위해서 +1을 해준다.

댓글