+1, -1, *2 로 탐색하는 경우에 대해서 BFS로 문제를 풀어주면 된다.
Queue에는 해당 위치와 몇번만에 도착했는지를 pair로 저장해서 넣어주고, 목적지에 도달했을 때, pair에 저장되어 있는 값을 확인해주면 된다.
#include <iostream>
#include <queue>
using namespace std;
bool visited[100010];
int main()
{
for (int i = 0; i < 100010; i++)
{
visited[i] = false;
}
int n, k;
cin >> n >> k;
queue<pair<int, int>> q;
pair<int, int> start = make_pair(n, 0);
q.push(start);
visited[n] = true;
int answer = 0;
while (!q.empty())
{
pair<int, int> p = q.front();
q.pop();
if (p.first == k)
{
answer = p.second;
break;
}
if (p.first - 1 >= 0 && !visited[p.first - 1])
{
q.push(make_pair(p.first - 1, p.second + 1));
visited[p.first - 1] = true;
}
if (p.first + 1 <= 100000 && !visited[p.first + 1])
{
q.push(make_pair(p.first + 1, p.second + 1));
visited[p.first + 1] = true;
}
if (p.first * 2 <= 100000 && !visited[p.first * 2])
{
q.push(make_pair(p.first * 2, p.second + 1));
visited[p.first * 2] = true;
}
}
cout << answer << endl;
return 0;
}
반응형
'Algorithm > 백준' 카테고리의 다른 글
백준 11724번 연결 요소의 개수 (c++) (0) | 2020.10.01 |
---|---|
백준 1764번 듣보잡 (c++) (0) | 2020.09.29 |
백준 1012번 유기농 배추 (c++) (0) | 2020.09.29 |
백준 17626번 four squares (c++) (0) | 2020.09.27 |
백준 11049 행렬 곱셈 순서 (0) | 2020.09.21 |