BOJ::문제풀이
13549 숨바꼭질 3
2영재
2018. 3. 26. 18:21
+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 |