문제 링크
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
풀이
- 플로이드 워셜 알고리즘으로 풀이
- 모든 사람에서 다른 사람까지의 최단 경로를 구하면 된다.
INF = int(1e9)
n , m = map(int,input().split())
graph = [[INF] * n for _ in range(n)]
# 자기 자신에서 자기 자신으로 가는 비용 0으로 초기화
for a in range(n):
for b in range(n):
if a == b :
graph[a][b] = 0
# a와 b가 친구라면 1로 표시
for _ in range(m):
a,b = map(int,input().split())
graph[a-1][b-1] = 1
graph[b-1][a-1] = 1
# 플로이드 워셜 점화식
for k in range(n):
for i in range(n):
for j in range(n):
graph[i][j] = min(graph[i][j],(graph[i][k]+ graph[k][j]))
result = INF
# 각 사람별 단계의 총합을 구해 케빈 베이컨 수의 가장 작은 값을 저장
for i in graph:
result = min(result,sum(i))
# 케빈 베이컨의 수가 가장 작은 사람의 번호 출력
for i in range(n):
if result == sum(graph[i]):
print(i+1)
break
'개발 > algorithm' 카테고리의 다른 글
[백준 5430번] AC - python (0) | 2022.02.17 |
---|---|
[백준 6064번] 카잉 달력 - python (0) | 2022.02.17 |
[백준 11403번] 경로 찾기 -python (0) | 2022.02.17 |
[백준 5525번] IOIOI - python (0) | 2022.02.16 |
[백준 11286] 절댓값 힙 - python (0) | 2022.02.16 |