[백준 5014] 스타트링크

silverCastle·2022년 1월 5일
0

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

✍️ 첫번째 접근

일반적인 BFS와는 다르게 상하좌우가 아니라 일직선 상에서의 BFS를 구현하면 된다.
여기서 주의할 점은,

  • 강호가 처음에 위치한 S층과 G층이 동일한 경우
  • 현재 위치한 층이 F층보다 크거나 1층 보다 작은 경우
  • 이미 방문한 층일 경우

이다. 이 부분들을 고려해서 구현을 한다면 큰 무리없이 해결할 수 있을 것이다.

#include <bits/stdc++.h>
using namespace std;
int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int f,s,g,u,d;
    cin >> f >> s >> g >> u >> d;
    if(s == g) {
        cout << 0;
        return 0;
    }
    int vist[1000001];
    fill(vist,vist+1000001,0);
    queue<int> Q;
    Q.push(s);
    vist[s] = 1;
    while(!Q.empty()) {
        int fr = Q.front();
        Q.pop();
        for(int cur: {fr+u,fr-d}) {
            if(cur > f || cur <= 0)
                continue;
            if(vist[cur] != 0)
                continue;
            if(cur == g) {
                vist[g] = vist[fr];
                cout << vist[g];
                return 0;
            }
            Q.push(cur);
            vist[cur] = vist[fr] + 1;
        }
    }
    cout << "use the stairs";

    return 0;
}

0개의 댓글