반응형

A→B

티어 : Silver 1
시간 제한 : 2 초
메모리 제한 : 512 MB
알고리즘 분류 : 그래프 이론, 그리디 알고리즘, 그래프 탐색, 너비 우선 탐색

 

문제

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

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

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

 

입력

첫째 줄에 A, B (

)가 주어진다.

 

출력

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

 

예제 입출력


Algorithm

Greedy
1. B가 2로 나누어 떨어지면 2로 나누기
2. 그렇지 않고 마지막 숫자가 1이면 1 빼기
3. 마지막 숫자가 1이 아니면 -1 출력
4. A가 만들어지면 횟수 출력
5. A보다 작아지면 -1 출력

 

Code

A, B = map(int, input().split())
answer = 0
while True:
    # B가 2로 나누어 떨어지면 2로 나누기
    if B % 2 == 0:
        B //= 2
        answer += 1
    # B가 2로 나누어 떨어지지 않고 마지막 숫자가 1이면 1 빼기
    elif str(B)[-1] == '1':
        B = int(str(B)[:-1])
        answer += 1
    # B가 2로 나누어 떨어지지 않고 마지막 숫자가 1이 아니면 -1 출력
    else:
        print(-1)
        break
    
    # B가 A보다 작아지면 -1 출력
    if A > B:
        print(-1)
        break
    # A가 만들어지면 횟수 출력
    elif A == B:
        print(answer+1)
        break

메모리: 30840 KB
시간: 72 ms

반응형

'백준 > Python' 카테고리의 다른 글

[백준 10844] 쉬운 계단 수 Python  (0) 2022.05.31
[백준 2468] 안전 영역 Python  (0) 2022.05.31
[백준 9372] 상근이의 여행 Python  (0) 2022.05.30
[백준 1003] 피보나치 함수 Python  (0) 2022.05.30
[백준 1026] 보물 Python  (0) 2022.05.30

+ Recent posts