+1, -1 하는 경우와 *2 하는 경우를 나눠서 갱신해주면 된다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <iostream> #include <queue> #define P pair<int,int> using namespace std; int visited[100001]; int n, k; int dx[] = {1,-1}; void bfs() { queue<int> q; q.push(n); visited[n] = 1; int next; while (!q.empty()) { int cur = q.front(); q.pop(); for (int i = 0; i < 2; i++) { next = cur + dx[i]; if (next < 0 || next > 100000) continue; if (visited[next] == 0 || visited[next] > visited[cur] + 1) { q.push(next); visited[next] = visited[cur] + 1; } } next = cur* 2; if (next < 0 || next > 100000) continue; if (visited[next] == 0 || visited[next] > visited[cur]) { q.push(next); visited[next] = visited[cur]; } } cout << visited[k] - 1 << endl; } int main() { ios_base::sync_with_stdio(false); cin >> n >> k; bfs(); return 0; } | cs |
'BOJ::문제풀이' 카테고리의 다른 글
12100 2048 (Easy) (0) | 2018.04.01 |
---|---|
1799 비숍 (0) | 2018.03.29 |
12851 숨바꼭질 2 (0) | 2018.03.26 |
1600 말이 되고픈 원숭이 (0) | 2018.03.26 |
13460 째로탈출 2 (0) | 2018.03.25 |