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

2024. 10. 29. 13:53·백준

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

1. BFS 풀이

# 모든 사람과의 거리가 제일 적은 사람 구하기!
# 여러 명이면 번호가 가장 작은 사람

from collections import deque

n, m = map(int,input().split()) # 유저 수, 친구관계 수
dp= [[] for _ in range(n+1)]
for i in range(m):
    a, b = map(int,input().split())
    dp[a].append(b)
    dp[b].append(a)
dist = [[0] * (n+1) for _ in range(n+1)]


for i in range(1, n+1):
    q = deque([i])
    visited = [0] *(n + 1)
    visited[i] = 1
    while q:
        node, d = q.popleft()
        for friend in dp[node]:
                if visited[friend] == 0:
                    visited[friend] = 1
                    dist[i][friend] = dist[i][node] + 1 # 이전거리 +1 
                    q.append(friend)

min_sum = float('inf')
ans = 0
for i in range(1, n + 1): # 1부터 n까지 케빈 베이컨 수 더해서 정답 찾을 것!
    total_distance = sum(dist[i][1:])  # 사람 i의 케빈 베이컨 수(0은 의미없으니 1부터)
    if total_distance < min_sum:
        min_sum = total_distance
        ans = i
    elif total_distance == min_sum and i < ans: # 예외처리
        ans = i

print(ans)

2. 플로이드-워셜 풀이

# 모든 사람과의 거리가 제일 적은 사람 구하기!
# 여러 명이면 번호가 가장 작은 사람

from collections import deque

n, m = map(int,input().split()) # 유저 수, 친구관계 수
dp= [[float('inf')]*(n+1) for _ in range(n+1)]

# 본인에서 본인으로의 거리는 0으로 설정
for i in range(1, n + 1):
    dp[i][i] = 0

for i in range(m):
    a, b = map(int,input().split())
    dp[a][b] = 1
    dp[b][a] = 1

for k in range(1, n+1):
    for i in range(1, n+1):
        for j in range(1, n+1):
            dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j])

min_sum = float('inf')
answer = 0
for i in range(1, n + 1):
    total_distance = sum(dp[i][1:])  # 사람 i의 케빈 베이컨 수
    if total_distance < min_sum:
        min_sum = total_distance
        answer = i
    elif total_distance == min_sum and i < answer: # 예외처리
        answer = i

print(answer)

 

 

 

저작자표시 (새창열림)

'백준' 카테고리의 다른 글

백준 2660. 회장뽑기  (0) 2024.10.30
백준 1753. 최단경로  (0) 2024.10.29
백준 11403. 경로 찾기  (0) 2024.10.28
백준 10815. 숫자 카드  (0) 2024.10.27
백준 2805. 나무 자르기  (0) 2024.10.27
'백준' 카테고리의 다른 글
  • 백준 2660. 회장뽑기
  • 백준 1753. 최단경로
  • 백준 11403. 경로 찾기
  • 백준 10815. 숫자 카드
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (383) N
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅&리팩토링 (6) N
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    항해99
    99클럽
    Til
    개발자취업
    코딩테스트준비
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
백준 1389. 케빈 베이컨의 6단계 법칙
상단으로

티스토리툴바