간단하게 BFS로 풀리리라고 생각했는데 생각보다 많이 틀렸다.
내가 관과했던 점은 18번째 줄이다. S == G 인 경우, 그리고 U 나 D 가 0인 경우 18번째 줄이 없으면 오답이 된다.
또, 처음에는 int형 배열 graph의 값이 0일 경우를 아직 방문하지 않은 경우로 표현했는데 (bool형 visited 사용하지 않았다) 이 경우 역시 U 나 D 가 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
|
#include <iostream>
#include <string.h>
#include <queue>
using namespace std;
int graph[1000001];
bool visited[1000001];
queue<int> floors;
int main() {
int F, S, G, U, D;
cin >> F >> S >> G >> U >> D;
memset(graph, 0, sizeof(graph));
memset(visited, false, sizeof(visited));
int ans = -1;
floors.push(S);
visited[S] = true;
while (!floors.empty()) {
int cur = floors.front();
floors.pop();
if (cur == G) {
ans = graph[cur];
break;
}
if (cur + U <= F && !visited[cur + U]) {
graph[cur + U] = graph[cur] + 1;
visited[cur + U] = true;
floors.push(cur + U);
}
if (cur - D >= 1 && !visited[cur - D]) {
graph[cur - D] = graph[cur] + 1;
visited[cur - D] = true;
floors.push(cur - D);
}
}
if (ans == -1)
cout << "use the stairs" << endl;
else
cout << ans << endl;
}
|
cs |
'개발 > 알고리즘' 카테고리의 다른 글
[백준1021][Java] 회전하는 큐 (0) | 2020.04.29 |
---|---|
[C++][백준 2178] 미로탐색 - 가중치가 없는 그래프의 최단경로? (0) | 2020.03.13 |
[백준 2644][C++] 촌수계산 (0) | 2020.02.07 |
[백준 1005][C++] ACM Craft (0) | 2020.02.06 |
[백준 2493][C++] 탑 (0) | 2020.01.23 |
댓글