오늘의 알고리즘
[C++] 백준 16928 뱀과 사다리 게임
하늘하늘 .
2022. 9. 27. 01:45
#include <iostream>
#include <queue>
int DP[101] = {};
bool visit[102] = {};
int main()
{
int N = 0;
int M = 0;
int iStart = 0;
int iEnd = 0;
std::cin >> N >> M;
for (int i = 0; i < N; ++i)
{
std::cin >> iStart >> iEnd;
DP[iStart] = iEnd;
}
for (int i = 0; i < M; ++i)
{
std::cin >> iStart >> iEnd;
DP[iStart] = iEnd;
}
int iCount = 0;
std::queue<std::pair<int, int>> que = {};
que.push({ 1, iCount });
while (!que.empty())
{
int iX = que.front().first;
int iY = que.front().second;
que.pop();
for (int i = 1; i <= 6; ++i)
{
int iNextX = iX + i;
if (iNextX == 100)
{
std::cout << iY + 1;
return 0;
}
else
{
while (DP[iNextX])
{
iNextX = DP[iNextX];
}
if (!visit[iNextX])
{
que.push({ iNextX, iY + 1 });
visit[iNextX] = true;
}
}
}
}
return 0;
}
DP라고 생각해서 DP라고 만들었습니다. 처음엔 우선순위큐로 만들었다가 앞에 있기만 한다고 모두 되는게 아니라는 걸 판단... 다시 큐로 만들었습니다. 입력 들어왔을 때 바로 이동할 곳을 만들어 놓고 6번 모두 입력해줘야 합니다.