본문 바로가기
알고리즘/그리디

[백준][python] 16953 A → B

by 성현0409 2022. 3. 17.

문제

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

 

16953번: A → B

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

www.acmicpc.net

결과

풀이

A, B = map(int, input().split())
answer = 1

while A < B:
    if B % 10 == 1:
        B //= 10
        answer += 1
    elif B % 2 == 0:
        B //= 2
        answer += 1
    else:
        answer = -1
        break

if B < A:
    answer = -1

print(answer)

 A 에서 B가 아닌 B에서 A로 생각한다면 쉽게 풀 수 있는 문제이다.

먼저 B의 1의자리수가 1이면 1을 제거해주는것을 우선순위로, 그 다음 짝수만 2로 나눌 수 있으니 2로 나눠주는 연산을 한다. 103등의 수가 오면 더 이상 연산을 할 수 없으니 -1을 출력하도록 한다. 이 연산을 B가 A보다 작아질때까지 수행하고 만약 A == B가 아닌 B < A가 된다면 -1을 출력하도록 다시 한 번 더 확인 한다.