Algorithm

[백준] A->B 16953번 (python)

salmon16 2024. 3. 22. 12:05

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

 

16953번: A → B

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

www.acmicpc.net

풀이 방법

처음엔 bfs로 풀었는 데 시간이 초과 났다.

그래서 그리디로 접근했다. 

그리디는 보통 뒤에서부터 해결한 경험이 있어 A->B구하는 거 보단 B->A로 구해야겠다고 생각했다.

하지만 예제 정답 부분만 보고 짝수이면 나누기 2 홀수이면 -1 후 나누기 10을 했다. 

예시 부분은 다 정답처리가 되었지만 1 25같은 수가 입력된다면 제대로 해결하지 못할 것이다.

그래서 10으로 나누었을 때 나머지가 1인 경우, 2로 나누었을 때 나머지가 1인 경우 다른 경우는 실패 이렇게 3가지 경우로 나누게 되었다.

A, B = map(int, input().split())
cnt = 0
while True:
    if (A > B): ## 실패 경우
        cnt = -1
        break
    if(A == B): ## 성공 경우
        cnt += 1
        break
    if(B % 10 == 1): ## -1 후 10으로 나누어 지는 경우
        B -= 1
        B = B // 10        
    elif(B % 2 == 0): ## 2로 나누어 지는 경우
        B = B // 2
    else:         ## 실패
        cnt = -1
        break
    cnt += 1
print(cnt)