티스토리 뷰

문제 링크입니다 : https://www.acmicpc.net/problem/13549

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 ��

www.acmicpc.net

 

 

 

#include <iostream>
#include <vector>
#include <queue>
#define INF 987654321

using namespace std;
int N, K;
vector<int> board;
vector<bool> visited;
vector<int> visitTime;

inline int move(int pos, int command) {
    switch(command) {
        case 0:
            return pos - 1;
            break;
        case 1:
            return pos + 1;
            break;
        case 2:
            return pos * 2;
            break;
    }
    return -INF;
}

int bfs(int start) {
    visitTime[start] = 0;
    visited[start] = true;
    priority_queue<pair<int, int>> pq;
    pq.push({0, start});

    while(!pq.empty()) {
        int cur = pq.top().second;
        int curTime = -pq.top().first;
        pq.pop();

        if(cur == K) {
            return visitTime[K];
        }

        for(int dir = 0; dir < 3; dir++) {
            int next = move(cur, dir);
            int nextTime = (dir == 2) ? curTime : curTime + 1;
            if(next < 0 || next >= 100001) continue;
            if(visitTime[next] <= nextTime) continue;
            visitTime[next] = nextTime;
            pq.push({-nextTime, next});
        }

    }
    return -1;
}

int main() {
    cin >> N >> K;
    
    board.assign(100001, 0);
    visited.assign(100001, false);
    visitTime.assign(100001, INF);

    cout << bfs(N);

    return 0;
}

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

 

'알고리즘 > 백준(BOJ)' 카테고리의 다른 글

백준 - 12852 1로 만들기 2  (0) 2020.06.27
백준 - 17404 RGB거리 2  (0) 2020.06.26
백준 - 12851 숨바꼭질 2  (0) 2020.06.25
백준 - 2293 동전1  (0) 2020.06.23
백준 - 1956 운동  (0) 2020.06.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함