STUDY/Algorithm

[백준] 16953 A->B

sinawi95 2021. 3. 25. 20:21
728x90

https://acmicpc.net/problem/16953 

 

16953번: A → B

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

www.acmicpc.net

a, b = map(int, input().split())
result = 1
break_chk = False
while b > a:
    result += 1
    if b & 1 == 0:
        b = b >> 1
    elif b % 10 == 1:
        b //= 10
    else:
        break_chk = True
        break
else:
    if a == b:
        print(result)
    else:
        print(-1)

if break_chk:
    print(-1)

너비 우선 탐색으로 나와있긴한데 시간이 오래걸리지 않을까 생각이 들었다.

그래서 그리디로 풀었다.

 

범위가 1<A<B<=10^9 이기때문에 B를 줄여가는게 더 낫다고 판단했다.

B가 짝수인경우에만 2로 나누어주고(b=b>>1) B의 일의 자리수가 1인경우에만 1을 빼는 식으로 구현했다.

B가 A보다 작거나 같아지면 종료가 되는데 같은 값이면 만들수 있으므로 해당 값을 출력하고, 다른 값인경우 -1을 출력했다.

나머지 경우에는 빼거나 나누지 못하는 경우이므로 break를 걸고 -1을 프린트 해주었다.

 

 

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 13706 제곱근 python  (1) 2021.03.25
[백준] 12907 동물원  (0) 2021.03.25
[백준] 1149 RGB거리  (0) 2021.03.23
[백준] 9461 파도반 수열  (0) 2021.03.23
[백준] 1904 01타일  (0) 2021.03.23