문제링크 : https://www.acmicpc.net/problem/13549
이 문제 역시 숨바꼭질 문제이고 BFS로 풀었다.
이전 문제는 어떤 시도마다 무조건 1초가 걸렸지만 이번 문제에서는
2배의 거리를 갈때는 0초가 걸린다는 것을 인지해야 한다.
소스코드 :
이 문제 역시 숨바꼭질 문제이고 BFS로 풀었다.
이전 문제는 어떤 시도마다 무조건 1초가 걸렸지만 이번 문제에서는
2배의 거리를 갈때는 0초가 걸린다는 것을 인지해야 한다.
소스코드 :
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
50
|
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
int n, k;
int visited[200002];
int Calc(int num, int nx) {
if (num == 0) return nx - 1;
else if (num == 1) return nx + 1;
else return 2 * nx;
}
int main() {
cin >> n >> k;
fill_n(visited, 200002, -1);
//priority_queue<int> q;
queue<int> q;
q.push(n);
visited[n] = 0;
int second = 0;
while (!q.empty()) {
int qSize = q.size();
for (int s = 0; s < qSize; s++) {
int cur = q.front();
if (cur == k) {
cout << visited[cur];
while (!q.empty())q.pop();
break;
}
q.pop();
for (int i = 0; i < 3; i++) {
int val = Calc(i, cur);
if (val < 200002 && visited[val] == -1) {
q.push(val);
visited[val] = (i == 2 ? visited[cur] : visited[cur] + 1);
if (val == cur * 2) {
visited[val] = visited[cur];
}
}
}
}
second++;
}
}
| cs |
댓글
댓글 쓰기