백준 16397 탈출

Caden·2023년 8월 27일
0

백준

목록 보기
1/20

bfs + 약간의 구현.
버튼 B연산의 예외 처리에 대해 조금 고민을 해봐야 함.
코드를 더 깔끔하게 만들기 위해 B연산은 따로 getNext 함수로 계산함.

#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;

int getNext(int x) {
    x <<= 1;
    int p = 1;
    for (int i = 0; i < to_string(x).size()-1; ++i) {
        p *= 10;
    }
    x -= p;
    return x;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int n, t, g;
    cin >> n >> t >> g;
    vector<int> vis(100000);
    queue<pii> Q;
    Q.push({n, 0}); 
    vis[n] = 1;
    while (!Q.empty()) {
        int nowP = Q.front().first;
        int nowD = Q.front().second;
        Q.pop();
        if (nowP == g) {
            cout << nowD;
            return 0;
        }
        if (nowD == t) continue;
        vector<int> nexts;
        if (nowP + 1 <= 99999) {
            nexts.push_back(nowP+1);
        }
        if (nowP > 0 && nowP < 50000) {
            nexts.push_back(getNext(nowP));
        }
        for (auto& next : nexts) {
            if (vis[next]) continue;
            vis[next] = 1;
            Q.push({next, nowD+1});
        }
    }
    cout << "ANG";
}

0개의 댓글