알고리즘/문제 풀이
[Python/파이썬 13549 백준] 숨바꼭질 3
광규니
2021. 4. 10. 00:32
반응형
www.acmicpc.net/problem/13549
13549번: 숨바꼭질 3
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
풀이
bfs문제입니다.
2*x, x-1, x+1인 경우에서
2*x 인 경우 :
순간이동하므로 시간 +0, appendleft해서 가장 우선순위로 설정하여 1000001까지 최단시간 미리 구해줌
x-1,x+1인 경우 :
+1씩 더해줌
풀면서 시간초과 났었는데
apppendleft를 안써주고 if문으로 하나하나씩 정의해줘서 시간초과났음...
import sys
from collections import deque
input=sys.stdin.readline
start,end=map(int,input().split())
graph=[-1]*100001
def bfs(start,end):
graph[start]=0
queue=deque()
queue.append(start)
while queue:
x=queue.popleft()
# 순간이동을 먼저 고려하게돼서 x가 나오면 그만 돌게함
if x==end:
return
for nx in (2*x,x-1,x+1):
if 0<=nx<100001:
if graph[nx]==-1:
# 순간이동 하는 경우를 우선으로 해서 시간을 최대한 줄임
if nx==2*x:
graph[nx]=graph[x]
queue.appendleft(nx)
else:
graph[nx]=graph[x]+1
queue.append(nx)
bfs(start,end)
print(graph[end])
반응형