#include <string> #include <iostream> #include <vector> #include <queue> #include <algorithm> #include <cmath> using namespace std; int dx[3] = {2, -1, 1}; int board[200001]; int main(){ ios::sync_with_stdio(0); cin.tie(0); int N, K; cin >> N >> K; queue<int> q; q.push(N); board[N] = 1; if(N == K){ cout << 0; return 0; } while(!q.empty()) { int cur = q.front(); q.pop(); for(int i=0;i<3;i++) { int nx; if(i != 0) nx = cur + dx[i]; else nx = cur*dx[i]; if(nx < 0 || nx >= 200000 || board[nx] ) continue; q.push(nx); if(i != 0) board[nx] = board[cur] + 1; else board[nx] = board[cur]; if(nx == K){ cout << board[nx] - 1 ; return 0; } } } return 0; }
- key point!
 
: 현재 값의 2배로 이동하는 cost가 0이기 때문에 가중치가 제일 높아야한다. --> 가장 먼저 이동하게 dx[] 조정!
(관련 반례 : 0,2 --> 1이 나와야 함!)