백준 문제풀이 16953 A -> B

Kim. K.S·2022년 2월 19일
0

boj 16953 : A -> B

문제 주소: https://www.acmicpc.net/problem/16953

난이도: silver 1

1.문제설명

  • 숫자 A, B가 주어진다.
  • A에서 B를 만들고 싶은데, 가능한 연산은 2를 곱하는것과 숫자 뒤에 1을 추가하는 것이다.
  • 최소 몇번의 연산으로 B가 될수있는가?, 만약에 불가능하면 -1출력

2.문제해결 아이디어.

  • 처음에는 bottom up방식으로 A를 B로 만드는 것을 생각했는데, 그리디로 구현할 방법이 생각이 안남
  • 어쩔수없이 top down으로 B를 A로 만드는 방향으로 진행

3.문제접근법

  • 1을 숫자 뒤에서 제거할수 있으면 제거한다.
    if B%10 == 1:
           B//=10
- 그게 안되면 2로 나눠지는지 확인하고 나눈다.
```python
elif B%2 == 0:
        B//=2
  • 둘다안되면 -1출력
temp = B
pass
if temp == B:
        print(-1)
        break

4.특별히 참고할 사항

  • cnt를 1로 초기화하는게 이해가 안간다.
  • 처음상태는 연산의 카운트가 0이여야 되는데..

5.코드구현

A, B = map(int, input().split()) # A -> B
cnt = 1
while A != B:
    cnt += 1
    temp = B
    if B%10 == 1:
        B//=10
    elif B%2 == 0:
        B//=2
    if temp == B:
        print(-1)
        break
else:
    print(cnt)
profile
시원한 맥주, 음악, 야구, 사진찍기를 좋아합니다.

0개의 댓글