Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
반응형
문제
https://www.acmicpc.net/problem/5014
풀이
solved.ac 난이도: Gold 5
간단한 BFS 문제.
시작하는 층, S에서 G까지 도달할 수 있는 최소 버튼 push 수를 구해야 한다.
이는 최단 거리를 구하는데 특화된 BFS의 영역이다.
특정 층 floor에서 위(floor + U) 또는 아래(floor - D)층으로 이동할 때
이미 방문했다면 해당 층으로 갈 수 있는 최단 push는 이미 구했으므로 더 이상 계산할 필요가 없다.
하지만 방문 하지 않았다면 해당 층으로 가는 최소 push 수는 floor까지 도달하는데 누른 push수의 +1 이다.
이를 G에 도달할 때까지 반복하고 만약 도달하지 못하고 BFS가 종료되면 G까지 도달할 수 없다.
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
|
int PushButtonBFS(int start_floor){
queue<int> que;
que.push(start_floor);
min_push[start_floor] = 0;
int floor, up_floor, down_floor, next_cost;
while(!que.empty()){
floor = que.front();
que.pop();
if(floor == G)
return min_push[floor];
up_floor = floor +U;
down_floor = floor - D;
next_cost = min_push[floor] +1;
if(up_floor <=F && min_push[up_floor] == -1){
que.push(up_floor);
min_push[up_floor] = next_cost;
}
if(down_floor >=1 && min_push[down_floor] == -1){
que.push(down_floor);
min_push[down_floor] = next_cost;
}
}
return -1;
}
|
cs |
코드
반응형
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] No.12851 - 숨바꼭질 2 (C++, BFS) (0) | 2021.04.22 |
---|---|
[백준] No.5214 - 환승 (C++, BFS, 더미 노드) (0) | 2021.04.21 |
[백준] No.10265 - MT (C++, SCC, Knapscak) (0) | 2021.04.19 |
[백준] No.3109 - 빵집 (C++, DFS) (0) | 2021.04.15 |
[백준] No.16915 - 호텔 관리 (C++, 2-SAT) (0) | 2021.04.14 |
댓글