danbibibi
article thumbnail

문제

문제 바로가기> BOJ 5014번: 스타트링크

 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net

 

풀이

BFS를 사용해서 푸는 문제였다!

 

#include<iostream>
#include<queue>
#define MAX 1000001
using namespace std;

int F, S, G, U, D;
bool visited[MAX];

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >> F >> S >> G >> U >> D;
    
    visited[S] = true;
    queue<pair<int, int>> q;
    q.push({S, 0});

    int ans = MAX;
    while(!q.empty()){
        int floor = q.front().first;
        int cnt = q.front().second;
        q.pop();

        if(floor == G) {
            ans = cnt; // 눌러야 하는 버튼의 수의 최솟값
            break;
        }
        
        if(floor+U <= F){ // 범위를 벗어나지 않는 경우 
            if(!visited[floor+U]){ // 이전에 방문하지 않은 경우
                visited[floor+U] = true;
                q.push({floor+U, cnt+1});
            }
        }
        if(floor-D > 0){  // 범위를 벗어나지 않는 경우 
            if(!visited[floor-D]){ // 이전에 방문하지 않은 경우
                visited[floor-D] = true;
                q.push({floor-D, cnt+1});
            }
        }

    }

    if(ans == MAX) cout << "use the stairs";
    else cout << ans;
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 2573번: 빙산  (0) 2022.12.31
BOJ 11057번: 오르막 수  (0) 2022.12.30
BOJ 1806번: 부분합  (0) 2022.12.23
BOJ 1253번: 좋다  (0) 2022.12.23
BOJ 2887번: 행성 터널  (1) 2022.12.22
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로