https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
import sys
from collections import deque
def bfs(v):
q = deque([v])
while q:
v = q.popleft()
if v == k: # 목표값 찾은 경우
return arr[v] # 해당 목표값까지의 깊이(걸린시간) 반환
for next_v in (v-1, v+1, 2*v):
if 0 <= next_v < 100001 and not arr[next_v]: # 유효한 인덱스 범위에 방문하지 않았으면?
arr[next_v] = arr[v] + 1 # 노드 깊이(=해당 위치까지 걸린 시간)
q.append(next_v) # 다음에 탐색할 값들 넣어주기(3개노드)
n, k = map(int, sys.stdin.readline().split())
arr = [0] * 100001 # visited 역할
print(bfs(n))
트리처럼 처음위치에서 -1, +1, *2 세 개로 계속 뻗어나가다가 목표값을 찾으면 그 깊이를 return
'백준' 카테고리의 다른 글
백준 1463. 1로 만들기 (0) | 2023.09.03 |
---|---|
백준 5014. 스타트링크 (0) | 2023.09.01 |
백준 7569. 토마토 (0) | 2023.08.31 |
백준 2644. 촌수계산 (0) | 2023.08.29 |
백준 2667. 단지번호붙이기 (0) | 2023.08.29 |