티스토리 뷰

알고리즘 공부/백준

백준 16953번

_Yunhwan 2022. 10. 26. 22:54

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

 

16953번: A → B

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

www.acmicpc.net

#2를 곱한다 *=2
#1을 수의 가장 오른쪽에 추가 *=10 +=1

a,b =map(int,input().split())
result = 1e9


# 백트래킹을 이용한 dfs
def dfs(num,cnt):
  global result

  if num<a:
    return 0
  
  if num==a:
    result = min(cnt, result)

  #맨뒤자리가 1이면 10을 나눈 값을 dfs
  if num%10==1:
    dfs(num//10 , cnt+1)
  #짝수일 경우 2를 나눈 값을 dfs
  if num%2==0:
    dfs(num//2, cnt+1)

#b에서부터 a까지 탐색하는 dfs
dfs(b,1)

if result==1e9:
  print(-1)
else:
  print(result)

 

DFS를 이용한 문제풀이

 

 

b에서 부터 a를 거꾸로 탐색해주기

 

맨 뒤 자리가 1이면 10을 나눈 값을 dfs

짝수일 경우 2를 나눈 값을 dfs

'알고리즘 공부 > 백준' 카테고리의 다른 글

백준 17086번  (0) 2022.10.29
백준 1062번  (0) 2022.10.27
백준 1806번  (0) 2022.10.27
백준 17070번  (0) 2022.10.26
백준 12869번  (0) 2022.10.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함