$O(l)$
각 정수 x마다 하나의 노드를 가지고 x-1,x+1,2*x와 연결된 간선이 있다고 생각한다. BFS탐색을 통해 최소비용을 구한다.
갈 수 있는 x 위치로는 200000까지 잡으면 되는데, 이보다 큰 x를 경유해서 목적지를 가는 것보다 1칸씩 이동해서 목적지에 도달하는 것이 항상 최선이기 때문이다.
#include<cstdio> const int MXN = 1e5; int n, k, c[MXN * 2], q[MXN * 2], h, t; void f(int x) { if (x >= 0 && x < MXN * 2 && !c[x]) c[x] = c[q[h]] + 1, q[t++] = x; } int main() { scanf("%d %d", &n, &k); c[n] = 1; q[t++] = n; while (h^t) { f(q[h] - 1); f(q[h] + 1); f(q[h] * 2); h++; } printf("%d", c[k] - 1); return 0; }
댓글 없음 :
댓글 쓰기