처음엔 BFS를 사용하여 A에서 B로 가는 최소횟수를 구했다.
그런데 찾아보니 이런 경우는 B에서 A로 가는 것을 구하면 훨씬 빠르다!!
from collections import deque
def BFS():
ans = 1
while Q:
size = len(Q)
for i in range(size):
num = Q.popleft()
if num > b : continue
if num == b:
return ans
if num * 2 <= b :
Q.append(num * 2)
tmp = int(str(num) + '1')
if tmp <= b :
Q.append(tmp)
ans += 1
return -1
a, b = map(int, input().split())
Q = deque()
Q.append(a)
print(BFS())
# ########다른 풀이 b -> a로 가기
# 2를 나누는 것과 뒷자리수 1을 빼는 게 동시에 일어날 수 없음을 이용
a, b= map(int, input().split())
ans = 1
while a!=b and b > a:
ans += 1
if b % 10 == 1:
b //= 10
elif b % 2 == 0:
b //= 2
else:
print(-1)
break
else:
if b < a:
print(-1)
else:
print(ans)
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 2636.치즈 (0) | 2021.04.02 |
---|---|
[백준 알고리즘] 13706. 제곱근 (0) | 2021.03.30 |
[백준 알고리즘] 1679. 숨바꼭질 (0) | 2021.03.27 |
[백준 알고리즘] 15663. N과 M (9) (0) | 2021.03.27 |
[백준 알고리즘]1759.암호만들기 - 파이썬 (0) | 2021.03.25 |