BOJ_S2_16953
๐ [S2_16953] A -> B
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int A,B;
static int min = Integer.MAX_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
// **** input start ****
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
// **** input end ****
dp(A,1);
// ๋ง์ฝ ๊ฐ์ด ์์ผ๋ฉด -1 ์ถ๋ ฅ
if(min == Integer.MAX_VALUE) System.out.println(-1);
else System.out.println(min);
}
// dp
static void dp(long num, int cnt){
// B๋ณด๋ค ํฌ๋ฉด ํต๊ณผ
if(num > B){
return;
}
// B์ด๋ฉด ์ต์๊ฐ ์
๋ ฅ
if(num == B){
min = Math.min(min, cnt);
return;
}
// 2 ๊ณฑํ๊ธฐ
dp(num*2,++cnt);
// ๋ฐฑํธ๋ํน
cnt--;
// 1์ ์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์ถ๊ฐ
dp(num*10+1, ++cnt);
// ๋ฐฑํธ๋ํน
cnt--;
}
}
๐ค ๋์ ์๊ฐ
๋ณด์๋ง์ A,B์ ๋ฒ์๊ฐ 10์ 9์น์ธ ๊ฒ์ ๋ณด๊ณ ์ฌ๊ท๋ก ํ์๋ค.
ํ์คํ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ๋ค ๋ณด๋ ๊ฐ์ด ์กํ๋ ๊ฒ ๊ฐ๋ค ใ
ใ
ํ์ด ๊ณผ์ ์ด๋ค.
- A๋ถํฐ ์นด์ดํ ์ ํด์ค๋ค.
- ๊ณฑํ๊ธฐ 2๋ก ํ๋ , 1์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์ถ๊ฐํ๋ ๊ฑฐ ํ๋ ๋ก ๊ณ์ํด์ ํผ์ณ ๋๊ฐ๋ค.
- ๋ง์ฝ B๋ณด๋ค ํฐ ๊ฐ์ด ๋ค์ ํธ์ถ๋๋ค๋ฉด return ํด์ค๋ค.
- ๋ง์ฝ B๊ฐ์ ๋๋ฌํ๋ฉด ๊ธฐ์กด ๊ฐ๊ณผ ๋น๊ตํด์ min ๊ฐ์ ๊ตฌํด์ค๋ค.
- ๋ง์ง๋ง์ min ์ถ๋ ฅํ๋ฉด ๋
์ฒ์์ dp[] ๋ฐฐ์ด์ ์ด์ฉํด ํ์๋๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ด๋ค.. ๊ทธ๋์ ์๊ฐํด๋ณด๋ ๊ตณ์ด ๋ฐฐ์ด์ ๊ตฌํ ํ์๊ฐ ์์๊น ๋ผ๋ ์๊ฐ๊ณผ ํจ๊ป ๊ทธ๋ฅ B์ ๋๋ฌํด์ฃผ๋ฉด ์ต์๊ฐ์ ๋น๊ตํด์ฃผ๋ ์์ผ๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ A,B์ ๋ฒ์๊ฐ int ๋ฒ์๋ฅผ ๋์ด์๊ธฐ ๋๋ฌธ์ long
์ ์ฌ์ฉํด์ num์ ๊ตฌํด์ค์ผ ํ๋ ๊ฒ์ด ํฌ์ธํธ๋ค.