알고리즘/acmicpc

[백준][5014번] 스타트링크[cpp, c++]

장그래 2020. 1. 29. 20:51
반응형

5014번 스타트링크

  • 간단한 BFS 문제이다.

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

  • 풀이방법
    1) BFS 탐색중 F보다 클 수 없고, 0보다 작을 순 없다.
    2) check2라는 배열을 통해 몇 번째에 찾았는지 검색을 해줬다.

 

5014번: 스타트링크

문제 강호는 코딩 교육을 하는 스타트업 스타트링크에 지원했다. 오늘은 강호의 면접날이다. 하지만, 늦잠을 잔 강호는 스타트링크가 있는 건물에 늦게 도착하고 말았다. 스타트링크는 총 F층으로 이루어진 고층 건물에 사무실이 있고, 스타트링크가 있는 곳의 위치는 G층이다. 강호가 지금 있는 곳은 S층이고, 이제 엘리베이터를 타고 G층으로 이동하려고 한다. 보통 엘리베이터에는 어떤 층으로 이동할 수 있는 버튼이 있지만, 강호가 탄 엘리베이터는 버튼이 2개밖에 없

www.acmicpc.net


#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
queue<int> q;
bool check[2000000];
int check2[2000000];
int F, S, G, U, D;
vector<int> v;
void bfs() {
    q.push(S);
    while (!q.empty()) {
        int x = q.front();
        q.pop();
        if (x == G) { //목표에 갔을 때
            cout << check2[x]-1<< "\n";
            return;
        }
        for (int i = 0; i < 2; i++) {
            int dx = x + v[i];
            if(dx > F || dx < 0) continue;
            if(check[dx] == true) continue;
            q.push(dx);
            check[dx] = true;
            check2[dx] = check2[x]+ 1;
         }
    }
    cout << "use the stairs";
}


int main(void){
    cin >> F >> S >> G >> U >> D;
    check2[S] = 1;
    check[S] = true;
    v.push_back(U);
    v.push_back(-D);
    bfs();
    return 0;
}

반응형