본문 바로가기
알고리즘

백준_1389_케빈 베이컨의 6단계 법칙

by 매화of사군자 2020. 1. 17.

https://www.acmicpc.net/problem/1389

 

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

첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻이다. A와 B가 친구이면, B와 A도 친구이며, A와 B가 같은 경우는 없다. 친구 관계는 중복되어 들어올 수도 있으며, 친구가 한 명도 없는 사람은 없다. 또, 모든 사람은 친구 관계로 연결되어져 있다.

www.acmicpc.net

해결 방법

> 각 사람들을 하나의 노드하고 생각하였다.

> 케빈의 베이컨 수는 각 노드에서 나머지 노드까지의 최단 거리의 합이다.

> 플로이드 워셜을 활용한다.

> 2차원 배열의 가로줄의 합이 케빈의 베이컨 수가 된다.

 

코드

더보기

user, friends_num = map(int,input().split())



#친구관계

relation = [[100 for i in range(user)]for i in range(user)]

 

for i in range(friends_num):

    one, two = map(intinput().split())

    relation[one-1][two-1] = 1

    relation[two-1][one-1] = 1



#플로이드 워셜

for k in range(user):

    for i in range(user):

        for j in range(user):

            if i == j:

                pass

            else:

                relation[i][j] = min(relation[i][k] + relation[k][j], relation[i][j])

 

final_relation = []



for i in relation:

    final_relation.append(sum(i))

 

print(final_relation.index(min(final_relation)) + 1)

'알고리즘' 카테고리의 다른 글

백준_11404_플로이드  (0) 2020.01.21
백준_4963_섬의 개수  (0) 2020.01.20
백준_2178_미로 탐색  (0) 2020.01.16
백준_7576_토마토  (0) 2020.01.15
서로소 집합(disjoint set) 연습  (0) 2020.01.14

댓글