Coding_Test_C++

BaekJoon 5014번: 스타트 링크(C++)

https://www.acmicpc.net/problem/5014

 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net

풀이법

1) 방문한 곳을 체크하는 visited배열과 BFS기반의 알고리즘으로 문제를 해결했다.

2) 항상 현재 stairs 기준으로 내려가서 올라가거나, 올라간 후 내려가는 경우를 고려해야 하기에, 하나의 stairs에 가능한 down과 up 을 모두 고려해 주어야 풀 수 있다.

3) 범위를 고려하여 항상 1보다 크고 f보다 작은 칸을 이동하는 것으로 코딩을 진행하였다.

#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
#define INF 987654321
using namespace std;

int f, s, g, u, d;
bool visited[1000010];
int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);
	cin >> f >> s >> g >> u >> d;
	visited[s] = true;
	queue<pair<int, int>> q;
	q.push({ s,0 });
	bool check = false;
	while (!q.empty())
	{
		int nowStair = q.front().first;
		int cnt = q.front().second;
		q.pop();
		if (nowStair == g)
		{
			cout << cnt ;
			check = true;
			break;
		}
		int up = nowStair + u;
		int down = nowStair - d;
		if (up >= 1 && up <= f)
		{
			if (!visited[up])
			{
				visited[up] = true;
				q.push({ up,cnt + 1 });
			}
		}
		if (down >= 1 && down <= f)
		{
			if (!visited[down])
			{
				visited[down] = true;
				q.push({ down,cnt + 1 });
			}
		}
	}
	if(check==false)
		cout << "use the stairs";

}

 

'Coding_Test_C++' 카테고리의 다른 글

BaekJoon 2635번: 수 이어가기(C++)  (0) 2021.08.13
BaekJoon 14500번: 테트로미노(C++)  (0) 2021.08.08
BaekJoon 2636번: 치즈(C++)  (0) 2021.08.05
BaekJoon 2589번: 보물섬(C++)  (0) 2021.08.04
BaekJoon 11559번: Puyo Puyo(C++)  (0) 2021.08.02