https://www.acmicpc.net/problem/1697
최대 범위인 100,000으로 벡터를 초기화해주고 BFS를 통해 탐색을 해주면서 제일 먼저 동생의 위치에 도달하면 그 값을 반환해준다. 이때 현재값에서 -1 +1 *2를 해줘야하기 때문에 이 값을 내부 반복문에 넣고 이를 순회하면서 탐색하도록 해주었다.
정답코드
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int MAX = 100001;
vector<int> v(MAX, 0);
int BFS(int start, int end)
{
queue<int> q;
q.push(start);
v[start] = 1;
while (!q.empty())
{
int curx = q.front();
q.pop();
if (curx == end) return v[end] - 1;
for (int nextx : {curx - 1, curx + 1, 2 * curx})
{
//범위검사
if (nextx >= 0 && nextx < MAX && v[nextx] == 0)
{
v[nextx] = v[curx] + 1;
q.push(nextx);
}
}
}
return -1;
}
int main()
{
int n, k;
cin >> n >> k;
cout << BFS(n, k) << "\n";
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][C++]7569번. 토마토 (1) | 2024.11.27 |
---|---|
[백준][C++]7576번. 토마토 (1) | 2024.11.26 |
[백준][C++]7562번. 나이트의 이동 (0) | 2024.11.24 |
[백준][C++]1167번. 트리의 지름 (0) | 2024.11.23 |
[백준][C++]1991번. 트리 순회 (0) | 2024.11.22 |