본문 바로가기

코딩 테스트

백준 : 5014 스타트링크

1. 출발지와 목적지가 같은 경우

 

 

#include <iostream>
#include <vector>
#include <queue>
#include <map>

using namespace std;





int main(void)
{
	int F, S, G, U, D;

	cin >> F >> S >> G >> U >> D;

	int answer = 0;

	vector<int> vec(F + 1);
	vector<int> parent(F + 1, -1);

	parent[S] = S;

	int arr[2] = { U,-D };

	queue<int> q;

	q.push(S);

	vector < bool> visited(F + 1, false);

	visited[S] = true;

	while (!q.empty())
	{
		int pos = q.front();
		q.pop();

		for (int i = 0; i < 2; ++i)
		{
			int next = pos + arr[i];

			if (next < 1 || next >= F + 1)
			{
				continue;
			}

			if (visited[next] == true)
			{
				continue;
			}

			q.push(next);
			visited[next] = true;
			
			parent[next] = pos;
			

			if (next == G)
			{
				break;
			}
		}
	}

	int pos = parent[G];

	while (true)
	{
		answer++;
		if (pos == -1)
		{
			break;
		}
		if (parent[pos] == pos)
		{
			break;
		}
		pos = parent[pos];
	}

	if (parent[G] == -1)
	{
		cout << "use the stairs";
	}
	else if (S == G)
	{
		cout << 0;
	}
	else
	{
		cout << answer;
	}
	

	return 0;
}

'코딩 테스트' 카테고리의 다른 글

백준 - 7576 토마토  (0) 2024.08.26
백준 - 1926 그림  (0) 2024.08.26
백준 7562 나이트의 이동  (0) 2024.08.25
백준 1260 Bfs, Dfs  (0) 2024.08.25
백준 - 2178 미로탐색  (0) 2024.08.25