본문 바로가기

백준/BFS

스타트링크

728x90

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

#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<deque>
#include<math.h>
#include<cmath>

using namespace std;

int main() {

	//55분 걸림 
	//쉬운 문제였으나 느긋하게 푼것도 있고, 처음에 지나지 않은 층수를 0으로 두고 시작층수를 0으로 둬서 오류가 생김 + 아래로내려갈때 마이너스가아닌 플러스함
	int f, s, g, u, d;

	
	cin >> f; // 총 층 수
	cin >> s; //시작
	cin >> g; //끝
	cin >> u; //위로 몇칸
	cin >> d; //아래로 몇칸

	vector<int>check(f + 1,-1); //체크 할 때 지나간건지 안지나간 건지 판별할 때, 0으로할지 1로할지 잘 판별하기 
	vector<int>ud;
	queue<int>q;
	
	q.push(s);
	check[s] = 0;

	ud.push_back(u); 
	ud.push_back(d);  
	
	while (!q.empty()) {

		int stairs = q.front(); 
		q.pop();
	
		if ( stairs == g ) { break; }
	
		for (int i = 0; i < 2; i++) {
			int nstairs;
			if (i == 0) {
				 nstairs = stairs + ud[i];
			}
			else {
				nstairs = stairs - ud[i];
			}
			
			if (nstairs <= f && nstairs>0 && check[nstairs]==-1 ) {
					
				check[nstairs] = check[stairs]+1;
				q.push(nstairs);
			}

		}

	}

	if (check[g] == -1) {
		cout << "use the stairs";
		return 0;
	}
	cout << check[g];
	return 0;


}

'백준 > BFS' 카테고리의 다른 글

말이되고픈원숭이- 1600번(Java)  (0) 2021.09.15
구슬탈출2 - 13460번 (Java)  (0) 2021.08.31
4연산  (0) 2021.03.16
아기 상어  (0) 2021.03.15
움직이는 미로탈출  (0) 2021.03.09