250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(백준 c++)1697 숨바꼭질 본문
728x90
반응형
문제
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.
출력
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
BFS로 해결.
주의사항은 같은 지점일 때 처리하는 경우와 0 ~ 100000 까지 범위를 잘 설정해야 한다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main(void){
int N, K, ans = 0;
int direct_x[3] = {-1, 1, 2};
vector<int> board(200001, 0);
vector<bool> visited(200001, false);
queue<int> q;
cin >> N >> K;
//같은 점에 위치할 때
if(N == K){
cout << 0;
return 0;
}
board[N] = 1;
visited[N] = true;
q.push(N);
while(!q.empty()){
int size = q.size();
for(int i = 0; i < size; i++){
int x = q.front();
q.pop();
for(int j = 0; j < 3; j++){
int nx = 0;
//-1, 1, * 2 처리
if(j != 2){
nx = x + direct_x[j];
}
else{
nx = x * direct_x[j];
}
if(nx >= 0 && nx < 100001 & !visited[nx]){
if(nx == K){
cout << ++ans;
return 0;
}
visited[nx] = true;
q.push(nx);
}
}
}
ans++;
}
return 0;
}
728x90
반응형
'백준 알고리즘' 카테고리의 다른 글
(백준 c++)5086 배수와 약수 (0) | 2021.03.17 |
---|---|
(백준 c++)2206 벽 부수고 이동하기 (0) | 2021.03.11 |
(백준 c++)7569 토마토 (0) | 2021.03.10 |
(백준 c++)2178 미로 탐색 (0) | 2021.03.09 |
(백준 c++)1463 1로 만들기 (0) | 2021.03.09 |