알고리즘/PS

[C++] 백준 5014 : 스타트링크

BigmacGood 2022. 5. 16. 21:49

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

백준 5014번 스타트링크를 풀었다.

 

이동하는 비용이 버튼을 누르는 횟수이므로 위로 가나 아래로 가나 비용이 똑같다.

그래서 BFS를 사용해서 풀었다.

map[i] 배열에는 i번째 층까지 가는데 드는 최소 비용을 저장한다.

visited[i] 배열은 i번째 층에 온 적이 있는지 확인하는 용도이다.

 

아래는 전체 코드입니다.

#include <iostream>
#include <string>
#include <queue>

using namespace std;
#define INF 1234567890

int f, s, g, u, d;
int map[1000001];
int visited[1000001];
queue<int> q;

void BFS() {
	while (!q.empty()) {
		int cur = q.front();
		q.pop();
		
		int next = cur + u;
		if (next > 0 && next <= f && visited[next] == 0) {
			visited[next] = 1;
			map[next] = map[cur] + 1;
			q.push(next);
		}

		next = cur - d;
		if (next > 0 && next <= f && visited[next] == 0) {
			visited[next] = 1;
			map[next] = map[cur] + 1;
			q.push(next);
		}
	}
}

int main() {
	cin >> f >> s >> g >> u >> d;

	for (int i = 0; i <= f; i++)
		map[i] = INF;

	map[s] = 0;
	visited[s] = 1;
	q.push(s);
	BFS();

	if (map[g] == INF)
		cout << "use the stairs";
	else
		cout << map[g];

	return 0;
}

 

'알고리즘 > PS' 카테고리의 다른 글

[C++] 백준 9466 : 텀 프로젝트  (0) 2022.06.25
[C++] 백준 1738 : 골목길  (0) 2022.05.24
[C++] 백준 17472 : 다리 만들기 2  (0) 2022.05.14
[C++] 백준 1937 : 욕심쟁이 판다  (0) 2022.05.13
[C++] 백준 1167 : 트리의 지름  (0) 2022.05.12