Amada Coding Club

[백준] Python 16953 A → B 본문

코딩테스트-Python/오답노트

[백준] Python 16953 A → B

아마다회장 2023. 1. 10. 23:09

문제 설명은 다음과 같다.

 

16953번: A → B

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

www.acmicpc.net

나는 a에서 b로 가는 방법이 아닌 b에서 a로 역추적하는 방법을 사용했다. 

b의 끝이 1로 끝나면 1을 빼고 아니면 2를 나누는 작업을 a보다 작거나 같을 때까지 반복하고 마지막에 비교할 때 바뀐 b와 a가 같으면 count값을 출력하는 방식을 생각했다.

a, b = map(int, input().split())
count = 0
while b > a:
    b = str(b)
    if (b[-1] == '1'):
        b = b[:len(b)-1]
        b = int(b)
        count += 1
    else:
        b = int(b)
        b = b // 2
        count += 1
if (b != a):
    print(-1)
else:
    print(count+1)

근데 실패가 떴다. 

왜지..? 했는데 생각해보니까

끝이 1이 아닌 경우에도 홀수의 경우 2로 나누게 되면 소수점이 되기 때문에 값이 나올 수가 없다.

그래서 끝이 1이 아닌 경우 홀수면 반복문을 빠져나가고 -1를 출력해야 한다!!

a, b = map(int, input().split())
count = 0
while b > a:
    b = str(b)
    if (b[-1] == '1'):
        b = b[:len(b)-1]
        b = int(b)
        count += 1
    else:
        if (int(b) % 2 != 0):
            b = int(b)
            break
        b = int(b)
        b = b // 2
        count += 1
if (b != a):
    print(-1)
else:
    print(count+1)

이렇게,, 이건 나름 쉽게 풀어서 기분이 좋다 ㅎㅎ