<문제>
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
<정답 코드>
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 48 49 | #include <iostream> #include <cstdio> #include <queue> using namespace std; int N, K; queue<int> q; bool check[100001]; int bfs(int N, int K) { int time = 0; q.push(N); check[N] = 1; while (1) { int size = q.size(); for (int i = 0; i < size; i++) { int tmp = q.front(); q.pop(); if (tmp == K) return time; if (tmp * 2 <= 100000 && check[tmp * 2] == 0) { q.push(tmp * 2); check[tmp * 2] = 1; } if (tmp + 1 <= 100000 && check[tmp + 1] == 0) { q.push(tmp + 1); check[tmp + 1] = 1; } if (tmp - 1 >= 0 && check[tmp - 1] == 0) { q.push(tmp - 1); check[tmp - 1] = 1; } } time++; } } int main() { scanf("%d%d", &N, &K); printf("%d\n", bfs(N, K)); return 0; } | cs |
'C++ 문제풀이' 카테고리의 다른 글
| 9095번 백준(Baekjoon) (0) | 2018.09.30 |
|---|---|
| 1463번 백준(Baekjoon) (0) | 2018.09.30 |
| 1929번 백준(Baekjoon) (0) | 2018.09.07 |
| 1157번 백준(Baekjoon) (0) | 2018.09.06 |
| 8958번 백준(Baekjoon) (0) | 2018.09.05 |