KEEP GOING

백준 2839번: A -> B (구현) 본문

code review/implementation

백준 2839번: A -> B (구현)

jmHan 2021. 11. 21. 20:44
반응형

https://www.acmicpc.net/problem/16953

 

16953번: A → B

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

www.acmicpc.net

 

문제

정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.

  • 2를 곱한다.
  • 1을 수의 가장 오른쪽에 추가한다. 

A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.

입력

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

출력

A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.

 

import sys
a,b = map(int, sys.stdin.readline().split())
cnt=0
while True:
    if b%10==1:
        b=b-1
        b=b//10
        cnt+=1
    elif b%2==0:
        b//=2
        cnt+=1
    # 두 조건을 모두 만족시키지 못할 경우
    else:
        print(-1)
        break
        # print(a,b)
    if b==a:
        print(cnt+1)
        break
    if b<a:
        print(-1)
        break
반응형
Comments