알고리즘/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;
}
반응형