https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
💡 아직도 dfs bfs 바로 구현 못해서 개념 다시 확인하고 문제 푸는 중. 특히 bfs보다는 dfs를 더 많이써서 bfs는 어색하다.
bfs는 너비우선탐색으로 하나의 노드를 확인하면 해당노드에 연결된 다른 노드를 큐에 넣고 순서대로 꺼내면서 전체를 확인하는 방식이다. 보통 deque를 사용하여 leftpop()을 하고, visited를 활용해 원하는 값을 저장한다.
이 문제의 경우 visited는 해당 노드를 방문했는지를 확인함과 동시에 몇초가 걸렸는지도 확인할 수 있다.
✔소스코드
import sys
from collections import deque
N,K=map(int,sys.stdin.readline().split())
visited=[0]*100001
def bfs():
q=deque()
q.append(N)
while q:
a=q.popleft()
if a==K:
print(visited[a])
break
for i in (a-1,a+1,a*2):
if 0<=i<100001 and not visited[i]:
visited[i]=visited[a]+1
q.append(i)
bfs()
'백준문제풀이' 카테고리의 다른 글
[백준 문제풀이] 14226번 : 이모티콘 (0) | 2021.09.19 |
---|---|
[백준 문제풀이] 13913번 : 숨바꼭질4 (0) | 2021.09.19 |
[백준 문제풀이] 2178번 : 미로탐색 (0) | 2021.09.01 |
[백준 문제풀이] 2667번 : 단지번호붙이기 (0) | 2021.08.29 |
[백준 문제풀이] 11724번 : 연결 요소의 개수 (0) | 2021.08.28 |