백준 1697 - 숨바꼭질
문제
백준 1697 - 숨바꼭질 풀러가기
문제 분석
동생과 수빈이의 위치를 정점 이라 생각 할 수 있고, 수빈이가 이동하는데 각각 1초 가 걸리므로 가중치가 1 이라고 생각 할 수 있다.
이때, 동생을 찾는 가장 빠른 시간을 구하는 문제이고
따라서 bfs 를 이용하여 문제를 풀면 된다.
그렇다면 자료구조는 뭘 이용해야 할까?
이용하지 않아도 된다. 왜냐하면 현재 위치에서 x-1, x+1, x*2 만 확인해주면 되기 때문이다.
문제 풀이(C++)
-
전체 코드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include <cstdio>#include <queue>using namespace std;bool visit[100001];int time[100001];queue<int> q;int n, k;void bfs() {while (!q.empty()) {int now = q.front();if (now == k) {break;}if (now - 1 >= 0) {if (!visit[now - 1]) {q.push(now - 1);visit[now - 1] = true;time[now - 1] = time[now] + 1;}}if (now + 1 <= 100000) {if (!visit[now + 1]) {visit[now + 1] = true;q.push(now + 1);time[now + 1] = time[now] + 1;}}if (now * 2 <= 100000) {if (!visit[now * 2]) {visit[now *2] = true;q.push(now * 2);time[now * 2] = time[now] + 1;}}q.pop();}}int main() {scanf("%d %d", &n, &k);q.push(n);bfs();printf("%d", time[k]);return 0;}cs
아직 배움의 과정에 있는 학생이니 내용에 부족한 점이 보이면 지적은 하되, 비난은 하지 말아주세요!!
댓글남기기