반응형
문제 링크 : https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가
www.acmicpc.net
> 풀이
BFS 를 사용하여 수빈이가 이동하는 경우를 계산해 봅시다
#include <cstdio>
#include <vector>
#include <queue>
#include <climits>
#define MAX 100000
using namespace std;
int N, K, res = INT_MAX;
queue<pair<int, int>> bfs;
bool check[100001];
int main(void) {
scanf("%d %d", &N, &K);
if (N >= K) {
printf("%d", N - K);
return 0;
}
bfs.push({N, 0});
while (!bfs.empty()) {
auto a = bfs.front();
int x = a.first, cnt = a.second;
bfs.pop();
if (x == K) {
res = min(res, cnt);
continue;
}
if (cnt > res) continue;
if (x > 0 && x * 2 <= MAX && !check[x * 2]) {
check[x * 2] = true;
bfs.push({x * 2, cnt + 1});
}
if (x + 1 <= MAX && x < K && !check[x + 1]) {
check[x + 1] = true;
bfs.push({x + 1, cnt + 1});
}
if (x - 1 <= MAX && x - 1 >= 0 && !check[x - 1]) {
check[x - 1] = true;
bfs.push({x - 1, cnt + 1});
}
}
printf("%d", res);
return 0;
}
(개발 환경 : vs code)
반응형
'알고리즘 (백준) > BOJ 길라잡이 (1)' 카테고리의 다른 글
백준 2606 (바이러스) / C++ (0) | 2020.07.24 |
---|---|
백준 2178 (미로 탐색) / C++ (0) | 2020.07.22 |
백준 2667 (단지번호붙이기) / C++ (0) | 2020.07.21 |
백준 1260 (DFS와 BFS) / C++ (0) | 2020.07.21 |
백준 1016 (제곱 ㄴㄴ 수) / C++ (0) | 2020.07.20 |