https://www.acmicpc.net/problem/1697
풀이
문제에서 주어지는 조건 3가지를 만족하는 한 모든 경우의 수를 큐에 넣어버린다.
이후, 수빈이의 위치 X와 동생의 위치 K가 동일한 값이 되는 가장 처음 값을 구하면 된다.
계속 반복하며 처음 입력한 위치를 기준으로 모든 경우의 수를 큐에 다 넣고, 동생의 위치만
수빈이와 동일하면 정지시켜주자. 이후, 해당 위치값을 출력하면 끝.
직전 포스팅인 미로 문제와 크게 다를게 없는 문제.
https://hyun-jun5.tistory.com/m/58
Code
#include <iostream>
#include <queue>
using namespace std;
int N, K;
int _isVisit[100001];
int BFS(int X)
{
queue<int> q;
q.push(X);
while (!q.empty())
{
X = q.front();
// 경우의 수 정의.
int move[3] = { 1,-1,X };
// 위치(값)가 동일하면 바로 정지
if (X == K)
break;
q.pop();
for (int i = 0; i < 3; i++)
{
int SearchX = X + move[i];
if (SearchX >= 0 && SearchX < 100001 && !_isVisit[SearchX])
{
q.push(SearchX);
_isVisit[SearchX] = _isVisit[X] + 1;
}
}
}
return _isVisit[K];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> K;
cout << BFS(N);
}
'💻 OnlineJudge > Baekjoon' 카테고리의 다른 글
[백준 / BOJ] C++ 6198 옥상 정원 꾸미기 (0) | 2022.10.19 |
---|---|
[백준 / BOJ] C++ 17610 양팔저울 (0) | 2022.10.19 |
[백준 / BOJ] C++ 2178 미로 탐색 (0) | 2022.10.17 |
[백준 / BOJ] C++ 1260 DFS와 BFS (0) | 2022.10.14 |
[백준 / BOJ] C++ 11000 강의실 배정 (0) | 2022.10.13 |