-
[백준] 1389 - 케빈 베이컨의 6단계 법칙알고리즘 2023. 4. 14. 17:24728x90
1.문제
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
2. 접근
1. 문제에서 n(node)과 m(edge)가 주워졌으며, 친구관계가 양방향이고 n의 범위가 500이하라는 점에서 플로이드를 떠올릴 수 있었다.
2. 친구가 연결되는 관계수가 적으며, 동일한 관계수일 경우에는 작은 인덱스 값을 뽑기 위해서 ( i -> j ) 이동하는 관계에서 cnt 변수에 더해져 가는 관계의 수를 더하고 그 값과 인덱스를 하나의 배열에 같이 저장을 시켰다
3. 마지막에 ( 관계의 총합 수 -> 인덱스 ) 순서로 정렬을 통해서 답을 구해줬다
3. 풀이
# 1389 import sys input = sys.stdin.readline INF = int(1e9) n , e= map(int,input().split()) graph = [[INF] *(n+1) for _ in range(n+1)] # 양방향 for i in range(e): a,b = map(int,input().split()) graph[a][b] = 1 graph[b][a] = 1 # 자기 자신으로 이동은 값이 0 이다 for i in range(1,n+1): graph[i][i] = 0 # 최소 거리 구하자 for k in range(1,n+1): for a in range(1,n+1): for b in range(1,n+1): graph[a][b] = min(graph[a][b], graph[a][k]+graph[k][b]) res = [] for i in range(1,n+1): cnt = 0 # 관계의 수를 더해줄것 for j in range(1,n+1): cnt += graph[i][j] res.append([cnt,i]) res.sort(key=lambda x:(x[0],x[1])) print(res[0][1])
'알고리즘' 카테고리의 다른 글
[백준] 1080 - 행렬 (1) 2023.05.08 [백준] 1049 - 기타줄 (0) 2023.04.20 [백준] 2417 - 정수 제곱근 (0) 2023.04.09 [백준] 1654 - 랜선 자르기 (0) 2023.04.09 [백준] 1920 - 수 찾기 (0) 2023.04.09