Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 1806 투포인터
- 2096 파이썬
- 1806 파이썬
- 5582 DP
- 코루틴 플로우
- java
- 6588 파이썬
- 5582 파이썬
- android hilt
- Android mvp
- Coroutine Flow
- 1753 다익스트라
- 투포인터 알고리즘
- 자바
- 안드로이드 hilt
- Android Room
- Jetpack Room
- git local remote
- 이진 탐색
- 1644 파이썬
- 1753 파이썬
- 자료구조
- 10819 파이썬
- 1806 백준
- 백준 10819
- flow buffering
- 백준 5582
- 백준 2096
- 백준 1644
- 1003 파이썬
Archives
- Today
- Total
Gemstone's Devlog
[백준] 5014번: 스타트링크 본문
https://www.acmicpc.net/problem/5014
5014번: 스타트링크
첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.
www.acmicpc.net
1. 문제 풀이 방법
문제를 자세히 읽어보면, 1차원 BFS 문제임을 금방 알아차릴 수 있다. (... 눌러야 하는 버튼의 수의 최솟값 ...)
가장 버튼을 적게 누르면서 원하는 층으로 가기 위해서는 이미 들렸던 곳은 피해야 하는데, 이에 따라서
queue에 들려야(검사해야) 하는 층값을 push 해주는 조건은 최저층 ~ 최고층 사이이면서 한 번도 들리지 않았던 곳들
로 제한하면 된다.
또한 BFS의 종료조건은 강호가 G층에 도달했을 때이며, path 배열에 저장되어있는 버튼의 수를 출력하면 된다.
만약의 출발층에서 BFS를 돌려도 G층에 도달하지 못했을 경우에는 "use the stairs"라는 문자열을 출력하면 된다.
2. 소스 코드
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int F, S, G, U, D;
const int MAX = 1000001;
int path[MAX];
bool visited[MAX];
vector<int> dx;
queue<int> q;
void BFS(int v) {
visited[v] = true;
q.push(v);
while (!q.empty()) {
v = q.front();
q.pop();
for (int i = 0; i < 2; i++) {
int nv = v + dx[i];
if (0 < nv && nv <= F) {
if (!visited[nv]) {
visited[nv] = true;
q.push(nv);
path[nv] = path[v] + 1;
}
}
}
}
}
int main() {
cin >> F >> S >> G >> U >> D;
dx.push_back(U); // 위로 가는 버튼의 값
dx.push_back(D * -1); // 아래로 가는 버튼의 값
BFS(S);
if (visited[G]) {
cout << path[G];
}
else {
cout << "use the stairs";
}
}
'Data Structure & Algorithms' 카테고리의 다른 글
[백준] 1039번: 교환 (0) | 2021.08.25 |
---|---|
[백준] 1525번: 퍼즐 (0) | 2021.08.25 |
[백준] 2206번: 벽 부수고 이동하기 (0) | 2021.08.23 |
[백준] 3055번: 탈출 (0) | 2021.08.23 |
[백준] 1715번: 카드 정렬하기 (0) | 2021.08.19 |