PS

백준 5014번 스타트링크

남마허 2020. 3. 24. 12:51

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

 

5014번: 스타트링크

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

www.acmicpc.net

 

 

 

 

 

<접근방법>

bfs 완전탐색 문제입니다.

엘리베이터로 이동하므로 최소 층과 최대 층이 있음에 유의해야 합니다.

 

 

<느낀 점>

 


 

 

 

<코드>

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;

#define max 1000000
int F, S, G, U, D;
bool visit[max + 1];

queue<int> q;

int bfs() {
	q.push(S);
	visit[S] = true;

	int cnt = 0;
	while (!q.empty()) {
		int sz = q.size();
		while (sz--) {
			int now = q.front();
			q.pop();

			if (!(1 <= now && now <= F)) continue;

			if (now == G) {
				return cnt;
			}

			int u = now + U;
			int d = now - D;

			if (u <= max) {
				if (!visit[u]) {
					visit[u] = true;
					q.push(u);
				}
			}
			if (1 <= d) {
				if (!visit[d]) {
					visit[d] = true;
					q.push(d);
				}
			}
		}
		cnt++;
	}

	return -1;
}

int main() {
	cin >> F >> S >> G >> U >> D;

	int ans = bfs();
	if (ans == -1) cout << "use the stairs" << '\n';
	else cout << ans << '\n';

	return 0;
}

 

 

 

 

 

반응형