백준 1697 숨바꼭질 문제 cpp
BFS 문제 풀이방식으로 해결.
시작지점을 기준으로 -1 지점, +1 지점, *2 지점인 곳에 1씩 더해가며 답을 찾음.
범위를 벗어나는 경우 (0 미만 혹은 100000이 넘어가는 경우.) continue 를 꼭 해줘야 함.
#include <bits/stdc++.h>
using namespace std;
int board[200002];
int n, m;
int dx[] = {-1, 1, 2};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
queue<int> Q;
for (int i = 0; i < 200002; i++) {
board[i] = -1;
}
board[n] = 0;
Q.push(n);
while (board[m] == -1) {
int cur = Q.front();
Q.pop();
for (int dir = 0; dir < 3; dir++) {
int nx;
if (dir != 2)
nx = cur + dx[dir];
else
nx = cur * dx[dir];
if (nx < 0 || nx > 100000)
continue;
if (board[nx] >= 0)
continue;
board[nx] = board[cur] + 1;
Q.push(nx);
}
}
cout << board[m];
}
'Algorithm' 카테고리의 다른 글
BOJ 11729 하노이 탑 이동 순서 c++ (0) | 2020.07.13 |
---|---|
BOJ 1629 곱셈 c++ (0) | 2020.07.11 |
BOJ 4179 불! c++ (0) | 2020.07.10 |
BOJ 7576 토마토 c++ (0) | 2020.07.10 |
BOJ 2178 미로 탐색 c++ (0) | 2020.07.10 |
최근댓글