https://www.acmicpc.net/problem/16953
풀이법
1) BFS를 활용하면 풀 수 있는 문제이다.
2) visited 배열을 사용하게 되면 memory 초과가 발생할 수 있기에 사용하지 않고 문제를 풀었다.
3) 최대 값을 1000000000로 정의하고 queue에 넣을 조건을 꼼꼼하게 설정하였다.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <cstring>
#include <queue>
#include <set>
using namespace std;
#define MAXNUM 1000000000
int a, b;
int ans = 0;
void bfs()
{
queue<pair<int, int>> q;
q.push({ a,1});
while (!q.empty())
{
int now = q.front().first;
int cnt = q.front().second;
q.pop();
if (now == b)
{
ans = cnt;
break;
}
if(now*2<=b)
q.push({ now*2,cnt + 1 });
if (now <= MAXNUM / 10)
{
if (now * 10 + 1 <= b)
q.push({ now * 10 + 1,cnt + 1 });
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> a >> b;
bfs();
if (ans == 0)
cout << -1;
else
cout << ans;
}
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 7785번: 회사에 있는 사람(C++) (0) | 2021.06.16 |
---|---|
BaekJoon 1302번: 베스트셀러 (0) | 2021.06.15 |
BaekJoon 10825번: 국영수(C++) (0) | 2021.06.12 |
BaekJoon 11123번: 양 한마리... 양 두마리...(C++) (0) | 2021.06.11 |
BaekJoon 2210번: 숫자판 점프 (0) | 2021.06.10 |