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";
}