문제
촌수계산 (https://www.acmicpc.net/problem/2644)
풀이
1. 초기 접근
- 문제조건 해석
- 움직임, 경로에 대한 문제고, 간선의 길이가 1로 정해져있다.
- BFS 문제다.
- 움직임, 경로에 대한 문제고, 간선의 길이가 1로 정해져있다.
- 알고리즘
- 가장 기초적인 BFS 문제라고 생각된다.
- 파이썬에서 그래프 탐색이 필요한 문제들은, 일단
dict {}
로 그래프를 먼저 만들고, (부모노드가 key, 자식노드들이 해당 key의 values가 된다.)set {}
으로 방문체크용 스트럭처를 만들면 된다.- 이러면 노드접근에 모두 상수시간 O(1) 밖에 안걸린다.
- 코드
import sys
from collections import defaultdict
n = int(input())
a, b = map(int, input().split())
t = int(input())
d = defaultdict(set)
for _ in range(t):
x, y = map(int, input().split())
d[x].add(y)
d[y].add(x)
def bfs(a, b):
q, visited = [a], {a}
step = 0
while q:
size = len(q)
for i in range(size):
cur = q.pop(0)
if cur == b:
return step
for j in d[cur]:
if j not in visited:
visited.add(j)
q.append(j)
step += 1
return -1
print(bfs(a, b))
'취업과 기본기 튼튼 > 코딩 테스트 노트' 카테고리의 다른 글
[BOJ] 7569. 토마토 (0) | 2019.04.07 |
---|---|
[BOJ ]7576. 토마토 (0) | 2019.04.07 |
[BOJ] 16397. 탈출 (0) | 2019.04.07 |
[BOJ] 1697. 숨바꼭질 (0) | 2019.04.07 |
[BOJ] 9466. 텀 프로젝트 (0) | 2019.04.07 |