💡 1차원 bfs 유형 (코테 스터디에서 나온 접근을 살펴보자)

import sys
from collections import deque
input = sys.stdin.readline
N, K = map(int,input().split(' '))
if N == K:
print(0)
exit(0)
visited = [False] * 100001
def bfs():
cnt = 0
dq = deque()
dq.append((N,cnt))
visited[N] = True
while dq:
x, cnt = dq.popleft()
for nx in [x-1, x+1, x*2]:
if 0 <= nx <= 100000 and visited[nx] is False:
if nx == K:
print(cnt+1)
return
else:
visited[nx] = True
dq.append((nx, cnt+1))
bfs()
💡 코테 스터디에서 나온 기발한 풀이법
서현님
from sys import stdin as s
from collections import deque
N, K = map(int, s.readline().split())
X = max(N, K) + 2
dp = [-1] * X
dp[N] = 0
dq = deque()
dq.append(N)
while dq:
x = dq.popleft()
if x == K:
print(dp[x])
exit()
for y in [x+1, x-1, x*2]:
if 0<=y<X and dp[y]==-1:
dp[y] = dp[x]+1
dq.append(y)
ex) 1, 15
16 - 1 을 고려하기 위해서 + 2를 진행해줘야 한다.
이렇게 하면 *2가 될수 있는 최댓값까지 고려가 가능하다.
굳이 배열을 최댓값까지 고려해줄 필요가 없다x / x+1 / x+2 / x+3
=>x+3은 x+1로 대처가 가능하다.