알고리즘 문제풀이/백준
[백준/BOJ] 5014번 스타트링크 (C++)
노력의천재
2021. 10. 28. 17:26
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
1697번 숨바꼭질 문제와 비슷한 BFS 문제였다. 그래서 어렵지 않게 해결 ㅎ (범위 처리만 잘 해주자)
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
int F, S, G, U, D;
int visit[1000001];
int BFS() {
queue<int> q;
q.push(S);
visit[S] = 0;
while(!q.empty()) {
int now = q.front();
q.pop();
if(now == G) return visit[now];
if(now + U <= F && visit[now + U] == -1) {
q.push(now + U);
visit[now + U] = visit[now] + 1;
}
if(now - D >= 1 && visit[now - D] == -1) {
q.push(now - D);
visit[now - D] = visit[now] + 1;
}
}
return -1;
}
int main(void) {
//freopen("input.txt", "rt", stdin);
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> F >> S >> G >> U >> D;
memset(visit, -1, sizeof(visit));
int answer = BFS();
if(answer == -1) cout << "use the stairs";
else cout << answer;
}