CodingTest Exam/[C++] Algorithm Study
71. 송아지 찾기(BFS : 상태트리탐색) (it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비) ★★★★☆
HongongHB
2023. 8. 21. 13:51

#include <stdio.h>
#include <queue>
using namespace std;
queue<int> Q;
int dis[10001];
int dir[3] = {1, -1, 5};
int main()
{
int s, e, x, val;
scanf("%d %d", &s, &e);
Q.push(s);
while(!Q.empty())
{
val = Q.front();
Q.pop();
if(e - val >= 5) // 거리가 5이상 차이나면 5만큼 이동
{
dis[val + 5] = dis[val] + 1; // 다음 노드까지의 거리 = 지금까지 이동한 거리 + 1
if(val + 5 == e) // 다음 노드가 목적지라면
{
printf("%d", dis[val + 5]);
return 0;
}
Q.push(val + 5);
}
else // 그렇지 않다면 1, -1, 5 모두 이동해보기
{
for(int i = 0; i < 3; i++)
{
if(dis[val + dir[i]] == 0) // 한 번도 가보지 않은 노드라면
{
dis[val + dir[i]] = dis[val] + 1;
if(val + dir[i] == e)
{
printf("%d", dis[val + dir[i]]);
return 0;
}
Q.push(val + dir[i]);
}
}
}
}
return 0;
}
