-
(BOJ #1389🔴) 케빈 베이컨의 6단계 법칙breakthrough-algorithms💔/TIL⛰️ 2024. 12. 13. 19:22
학습 키워드
그래프 탐색 (BFS)
핵심 포인트
- adj (인접 리스트) 사용
- 시작점
- visit 배열
- dist(최단거리) 배열
- Queue
개선해야할 점
복잡하게 생각하지 말고, 최대한 심플한 코드를 작성하자.
그리고 먼저 손과 머리로 풀이가 완료된 다음에 코딩 하자.
🔴풀이 순서🔴
- adj (인접 리스트) 사용
- 시작점을 기준 (0~N-1 모두 탐색)
- 시작점을 queue에 append
- queue.pop
- <⭐️1⭐️> pop한 adj index 확인
- 확인한 adj index는, queue에 들여보내기 전, 먼저 확인!!
- <⭐2⭐️> 확인 >> adj 순서대로, True; pass, False: queue추가 & 직전 pop한 index의 dist(최단거리) + 1
새로 배운 개념
- adj 인접배열
- 그래프 문제에서 사용
- Deque (데크)
- Python 에서 사용하는 Queue
그림 풀이


알고리즘 이해 & 풀이 

테스트케이스 이해 코드
- tutor 코드
import sys from collections import deque input = sys.stdin.readline N, M = list(map(int, input().split())) # 인접리스트 adj = [[] for _ in range(N)] for _ in range(M): u, v = list(map(int, input().split())) adj[u - 1].append(v - 1) adj[v - 1].append(u - 1) min_kevin_bacon = 1e9 min_person = -1 for startPoint in range(N): # startPoint를 시작점으로 하는 BFS # 각 노드까지의 최단거리를 구해서 다 합치기 visit = [False] * N dist = [-1] * N visit[startPoint] = True dist[startPoint] = 0 queue = deque([startPoint]) while len(queue) != 0: q = queue.popleft() for v in adj[q]: if not visit[v]: queue.append(v) visit[v] = True dist[v] = dist[q] + 1 if min_kevin_bacon > sum(dist): min_kevin_bacon = sum(dist) min_person = startPoint + 1 print(min_person)레퍼런스
https://www.acmicpc.net/problem/1389
'breakthrough-algorithms💔 > TIL⛰️' 카테고리의 다른 글
(프로그래머스 #43165) 타겟 넘버 [DFS] (0) 2025.03.18 (BOJ #11724🔴) 연결 요소의 개수 (1) 2024.12.13 (BOJ #11720) 숫자의 합 (0) 2024.11.27 (BOJ #10809) 알파벳 찾기 (0) 2024.11.27 (BOJ #3052) 나머지 (0) 2024.11.27