[BOJ] 1697 숨바꼭질
2018. 9. 11. 10:49
1. 문제링크
https://www.acmicpc.net/problem/1697
2. 해설
이 문제는 간단한 BFS문제이다.
1. n != k 이면 큐에 넣지 않는다.
2. n부터 BFS를 돌면서 k가 되는 순간 멈춘다.
3. 소스코드
#include <cstdio> #include <queue> using namespace std; int check[100100]; bool checking(int next, int cur){ if(next >= 0 && next <= 100000){ if(check[next] == 0){ return true; } } return false; } int main() { int n, k, ans=0; queue<int> q; scanf("%d %d", &n, &k); if(n != k){ q.push(n); } while(!q.empty()){ int cur = q.front(); q.pop(); int next = cur + 1; if(checking(next, cur)){ check[next] = check[cur] + 1; q.push(next); } if(next == k){ ans = check[next]; break; } next = cur - 1; if(checking(next, cur)){ check[next] = check[cur] + 1; q.push(next); } if(next == k){ ans = check[next]; break; } next = cur * 2; if(checking(next, cur)){ check[next] = check[cur] + 1; q.push(next); } if(next == k){ ans = check[next]; break; } } printf("%d\n", ans); return 0; }
4. 추가언급
이 문제에서 처음에 n과 k가 같은 지 확인을 하는데, 왜냐하면 n과 k가 같은 경우는 예를 들어 5라고 하면 check[6, 4, 10]이 1이 되고, check[5]는 6에서 넘어오게 되어 2가 적히게 된다. 그렇게 같을 때는 따로 확인을 해주어야 한다.
'프로그래밍 > 문제풀이(boj)' 카테고리의 다른 글
[BOJ] 13398 연속합 2 (0) | 2018.09.12 |
---|---|
[BOJ] 10845 큐 (0) | 2018.09.11 |
[BOJ] 2096 내려가기 (0) | 2018.09.07 |
[BOJ] 1526 가장 큰 금민수 (0) | 2018.09.07 |
[BOJ] 1525 퍼즐 (0) | 2018.09.06 |