https://www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
[풀이]
A와 B의 값이 작다면 DP로 풀 수 있는 문제지만, 값이 크기 때문에 재귀적으로 풀었다.
A = A*2 와 A = A * 10 + 1 두 가지로 나눠서 재귀함수를 호출하면서 B와 같아질 때의 카운트를 리턴하도록 한다.
재귀함수의 탈출조건은 A가 B보다 커질 경우로 해서 무한 루프에 빠지지 않도록 구현했다.
[소스코드]
import java.util.Scanner;
public class Main { //bj16953 A->B
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long a=sc.nextLong();
long b=sc.nextLong();
long min=go(a,b,0);
if(min==Long.MAX_VALUE) System.out.println(-1);
else System.out.println(min);
}
public static long go(long a,long b,long num) {
else if(a>b) {
return Long.MAX_VALUE;
}
else if(a==b) {
return 1;
}
long min=Long.MAX_VALUE;
long t1=go(a*2,b,num);
if(t1!=Long.MAX_VALUE) min=min<t1+1?min:t1+1;
long t2=go(a*10+1,b,num+1);
if(t2!=Long.MAX_VALUE) min=min<t2+1?min:t2+1;
return min;
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 14889번 - 스타트와 링크 (0) | 2021.04.17 |
---|---|
백준 2636번 - 치즈 (0) | 2020.11.18 |
백준 17070번 - 파이프 옮기기 1 (0) | 2020.11.17 |
백준 16235번 - 나무 재테크 (0) | 2020.11.17 |
백준 1562번 - 계단 수 (0) | 2020.11.17 |