nyunu

[python] 16953, A -> B 본문

코딩테스트_python

[python] 16953, A -> B

여뉴누 2023. 8. 23. 15:51
728x90

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

 

16953번: A → B

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

www.acmicpc.net

 

[문제]

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

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

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

 

[입력]

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

 

[출력]

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

 

[예제]

 

[풀이]

a, b = map(int, input().split())
result = [b]

while True:
  if b % 2 == 0:
    b //= 2
    result.append(b)
  elif b % 10 == 1:
    b //= 10
    result.append(b)
  else:
    print(-1)
    break;
  
  if b == 1 or b <= a:
    if a in result:
      print(len(result[:result.index(a) + 1]))
      break;
    else:
      print(-1)
      break;

 

728x90

'코딩테스트_python' 카테고리의 다른 글

[python] 1439, 뒤집기  (0) 2023.08.24
[python] 10610, 30  (0) 2023.08.23
[python] 1715, 카드 정렬하기  (0) 2023.08.22
[python] 10162, 전자레인지  (0) 2023.08.21
[python] 13305, 주유소  (0) 2023.08.21