문제 : https://www.acmicpc.net/problem/1697
BFS 문제다.
위치를 l이라 할때, l-1, l+1, 2*l 을 각각 bfs로 탐색하면 된다.
이 때, BFS에서 중요한 중복 확인을 꼭 해야한다(이 코드에서는 v = dict() 딕셔너리를 이용하여 확인한다.)
또한, 0-100000 범위를 넘지않게 한다.
숨바꼭질 2,3,4와 달리 다른 조건이 없으니 이걸로 끝낼 수 있다.
import sys
from collections import deque
d = dict()
v = dict()
ret = 1000000000000
n,k = [int(i) for i in sys.stdin.readline().rstrip().split()]
def bfs(n,k):
global ret,d
q = deque()
q.append(n)
d[n] = 0
while q:
l = q.popleft()
if l in d:
pass
if l==k:
break
for loc in [l-1,l+1,2*l]:
if loc not in d and 0<=loc <= 100001:
d[loc] = d[l]+1
q.append(loc)
bfs(n,k)
print(d[k])
'취준 > 백준' 카테고리의 다른 글
[백준][Python][2747][lru_cache] 피보나치 수 (0) | 2020.03.04 |
---|---|
[백준][Python][15686][브루트포스] 치킨 배달 (0) | 2020.03.03 |
[백준][Python][2529][Greedy...?] 부등호 (0) | 2020.03.01 |
[백준][Python][2294][DP] 동전 2 (0) | 2020.02.29 |
[백준][Python][11054][DP]가장 긴 바이토닉 부분 수열 (0) | 2020.02.28 |