문제
입력 : n=수빈시작위치, k=동생위치(도착지점)
출력 : 수빈이가 걷거나 순간이동한 횟수
예를들어 n=5, k=17 일떼, 수빈이가 5-10-9-18-17 순으로 가면 4번 만에 동생을 찾을 수 있다.
풀이
from collections import deque
MAX=10**5
dp=[0]*(MAX+1)
dq = deque()
n,k = map(int,input().split())
dq.append(n)
while dq:
c=dq.popleft() #current
if c==k:
print(dp[k])
break
for nc in (c-1,c+1,c*2):
if 0<=nc<=MAX and dp[nc]==0:
dp[nc]=dp[c]+1
dq.append(nc)
큐에 현재 위치 c와 다음 위치 c-1, c+1, c*2를 넣으며 횟수를 추가했다.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
백준 2583 (실버1): 영역 구하기 (bfs, Python) (0) | 2022.09.26 |
---|---|
백준 11047 : 동전0 (Greedy, Python) (0) | 2022.05.29 |
백준 1654: 랜선자르기 (Python) - 이진탐색 알고리즘 (0) | 2022.04.22 |
백준 1475: 방 번호 (Python) (0) | 2022.04.09 |
백준 1012: 유기농 배추 (Python) - bfs/ 런타임 에러 (RecursionError), 시간초과 해결 (0) | 2022.03.20 |