반응형
<DFS 코드>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int mini = 10000; // 임의의 큰수
long long A, B, cnt;
void dfs(long long a, int cnt)
{
if (a > B) return;
if (a == B)
{
mini = min(mini, cnt);
}
dfs(a * 2, cnt + 1);
dfs(a * 10 + 1, cnt + 1);
}
int main()
{
cin >> A >> B;
dfs(A, 1);
if (mini == 10000) cout << -1;
else cout << mini;
}
<거꾸로 탐색하는 코드>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int A, B, cnt;
int main()
{
cin >> A >> B;
while (true)
{
if (A > B)
{
cout << -1;
break;
}
if (A == B)
{
cnt++;
cout << cnt;
break;
}
if (B % 10 == 1)
{
B--;
B /= 10;
}
else if (B % 2 == 0)
{
B /= 2;
}
else
{
cout << -1;
break;
}
cnt++;
}
}
풀이 방법
dfs 구현을 어떻게 해야할지... 큐를 만들어서 풀어야할지 고민을 많이 했던 문제이다. 어차피 A에 2를 곱하거나 1을 오른쪽에 붙이거나 둘중 하나이므로 거꾸로 답부터 탐색을 해서 답을 찾았고 DFS코드의 경우 다른 분의 숏코드를 참고하였다.(www.acmicpc.net/source/21103705)
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[C/C++] 백준 14936번 - 엘리베이터 장난 (0) | 2021.01.19 |
---|---|
[C/C++] 백준 3976번 - 역습 (DP) (1) | 2021.01.19 |
[C/C++] 백준 11660번 - 구간 합 구하기 5 (DP) (0) | 2021.01.17 |
[C/C++] 백준 1074번 - Z (분할정복) (0) | 2021.01.17 |
[C/C++] 백준 17946번 - 피자는 나눌 수록 커지잖아요 (0) | 2021.01.17 |