[BFS] 백준 5014 스타트링크
2021. 3. 27. 14:20ㆍ알고리즘 문제분석
수행 시간 : 1시간
골드 5 난이도지만 실제 체감 난이도는 한... 실버 1~2 정도로 쉬운문제였다. 엘레베이터 배열을 일차원으로 선언해줘도 되고 범위만 잘 생각해주면 막히는 부분없이 구현 가능한 알고리즘 문제이다.
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int f, s, g, u, d;
bool visited[1000001];
int bfs(int a, int b) { //x는 출발지 y는 도착지
visited[a] = true;
queue<pair<int, int>> q;
q.push(make_pair(a, 0));
int cnt = 0;
while (!q.empty()) {
int x = q.front().first;
cnt = q.front().second;
q.pop();
int nx = x + u * 1;
int bx = x + d * -1;
//무조건 up은 f보다 작아야됨 down은 0보다 커야됌
if (x == b) {
return cnt;
}
if (visited[nx] == false && nx <= f) {
visited[nx] = true;
q.push(make_pair(nx, cnt + 1));
}
if (visited[bx] == false && bx > 0) {
visited[bx] = true;
q.push(make_pair(bx, cnt + 1));
}
}
return -1;
}
void visited_init() {
for (int i = 1;i < 1000001;i++) {
visited[i] = false;
}
}
int main() {
cin >> f >> s >> g >> u >> d;
visited_init();
int ans = bfs(s, g);
if (ans == -1) {
cout << "use the stairs";
}
else
cout << ans;
}
'알고리즘 문제분석' 카테고리의 다른 글
[BFS] 백준7562 나이트의 이동 (0) | 2021.03.29 |
---|---|
[BFS & 완전탐색] 백준 14502 연구소 (0) | 2021.03.27 |
[구현] 백준 14499 주사위 굴리기 (0) | 2021.03.24 |
[BFS&완전탐색] 백준 2468 안전 영역 (0) | 2021.03.19 |
[BFS] 백준 1697 숨바꼭질 (0) | 2021.03.16 |