본문 바로가기
PS(Problem Solving)/백준_BOJ

[백준] 5014번 - 스타트링크 (C++) 문제 및 풀이

by 초코칩프라푸치노 2021. 11. 9.

문제) 백준 - BFS - 스타트링크

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

 

BFS를 통해서 G층까지 최소 버튼 횟수를 구한다. 핵심은 Queue에 방문 층과 버튼 횟수를 함께 넣는 것.

 

C++ 소스코드)

int bfs() {
memset(visited, false, sizeof(visited));
queue<p> q;
q.push({ S, 0 });
visited[S] = true;
while (!q.empty()) {
int now = q.front().first;
int cnt = q.front().second;
q.pop();
if (now == G) return cnt;
if (now + U <= F && !visited[now + U]) {
q.push({ now + U, cnt + 1 });
visited[now + U] = true;
}
if (now - D >= 1 && !visited[now - D]) {
q.push({ now - D, cnt + 1 });
visited[now - D] = true;
}
}
return -1;
}
view raw 5014.cpp hosted with ❤ by GitHub

 

Full Code)

https://github.com/Chocochip101/BOJ_Solution/blob/main/Problem%205000~9999/5014_%EC%8A%A4%ED%83%80%ED%8A%B8%EB%A7%81%ED%81%AC.cpp

 

GitHub - Chocochip101/BOJ_Solution

Contribute to Chocochip101/BOJ_Solution development by creating an account on GitHub.

github.com

 

반응형

댓글