백준|16953번|A->B

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
76/136

문제설명
숫자 A와 B를 입력받고 두 가지 연산방식을 사용하여 A를 B로 만들 때 필요한 최소한의 연산횟수를 출력하는 문제입니다.
연산1. A*2
연산2. A의 오른쪽에 1 추가

작동 순서
1. A와 B를 입력받습니다.
2. A에 2를 곱하고 해당 값을 구한 적이 없을 경우 그 값을 구하는데 필요한 연산횟수를 저장합니다.
3. A의 오른쪽에 1을 추가하고 해당 값을 구한 적이 없을 경우 그 값을 구하는데 필요한 연산횟수를 저장합니다.
4. B를 구한적이 있을 경우 그 수를 구하는 연산횟수를 출력하고 구한 적이 없을 경우 -1을 출력합니다.

소스코드

from collections import deque
queue = deque()
A, B = map(int, input().split())
arr = dict()
queue.append(A)
arr[A] = 1
while len(queue) > 0:
    num = queue.popleft()
    if num*2 <= B:
        if num*2 not in arr:
            arr[num*2] = arr[num]+1
            queue.append(num*2)
    if int(str(num)+'1') <= B:
        if int(str(num)+'1') not in arr:
            arr[int(str(num)+'1')] = arr[num]+1
            queue.append(int(str(num)+'1'))
if B in arr:
    print(arr[B], end="")
else:
    print(-1, end="")
profile
INTP 개발자 지망생

0개의 댓글