분류는 백트래킹인데 질문 게시판을 보니 왜 백트래킹 문제인지 궁금하다는 문제
일단 BFS로 풀었는데 DFS로 풀면 시간 내에 돌아갈지 궁금하다
Local에서 몇가지 케이스를 돌렸을 때 제한 시간보다 오래 걸렸는데 맞았다고 뜨는거보니 신기하기도 하다
구현은 범위를 구분해서 +-1을 한 결과를 보거나 *2 를 하면 되는 경우인데
최대가 100,000이라해서 수빈이가 100,000을 넘어가면 안된다 라는 조건을 걸면 틀리는 문제
반례를 찾기 어려운 문제라 반례를 찾는데 시간을 좀 투자했다.
#include <iostream>
#include <queue>
using namespace std;
bool check[110001];
int main()
{
int subin, bro;
int step = 0;
bool found = false;
queue<int> curQ;
queue<int> nextQ;
cin >> subin >> bro;
if (subin != bro)
{
curQ.push(subin);
while (!found)
{
while (!curQ.empty())
{
int cur = curQ.front();
curQ.pop();
if (cur == bro)
{
found = true;
break;
}
check[cur] = true;
if (cur > 0 && !check[cur - 1])
nextQ.push(cur - 1);
if (cur < bro && !check[cur + 1])
nextQ.push(cur + 1);
if (cur * 2 < 110000 && !check[cur * 2])
nextQ.push(cur * 2);
}
if (!found)
{
while (!nextQ.empty())
{
curQ.push(nextQ.front());
nextQ.pop();
}
step++;
}
}
}
cout << step;
return 0;
}
2019-01-08 14:00:00에 Tistory에서 작성되었습니다.