[백준/C++] 1697번 숨바꼭질
2021. 3. 26. 18:05ㆍ알고리즘/BFS DFS
728x90
반응형
문제: www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
문제풀이
일차원 선 위에서 BFS를 이용하여 최단거리를 구하였다.
이때 수빈이와 동생의 위치는 0부터 100, 000까지이지만
수빈이는 현재 거리의 2배를 순간 이동할 수 있기 때문에 거리 배열을 100,000의 두배인 200,001로 선언하였다.
코드
#include <iostream>
#include <queue>
using namespace std;
int dist[200001];
int main(){
ios::sync_with_stdio(false); cin.tie(NULL);
int n,k;
cin>>n>>k;
queue<int> q;
q.push(n); //수빈이의 시작위치
dist[n] = 1;
while(true){
int cur = q.front();
q.pop();
if(cur == k){
cout<<dist[cur]-1; //수빈이의 시작위치가 1이였기 때문에 1을 빼준다.
return 0;
}
if(cur-1 >= 0 && cur-1 <= 200000 && dist[cur-1] == 0){ //-1만큼 걸을때
dist[cur-1] = dist[cur] + 1;
q.push(cur-1);
}
if(cur+1 >= 0 && cur+1 <= 200000 && dist[cur+1] == 0){ //1만큼 걸을때
dist[cur+1] = dist[cur] + 1;
q.push(cur+1);
}
if(cur*2 >= 0 && cur*2 <= 200000 && dist[cur*2] == 0){ //*2 순간이동할때
dist[cur*2] = dist[cur] + 1;
q.push(cur*2);
}
}
}
결과

728x90
반응형
'알고리즘 > BFS DFS' 카테고리의 다른 글
[백준/C++] 1012번 유기농 배추 (0) | 2021.03.27 |
---|---|
[백준/C++] 4179번 불! (0) | 2021.03.26 |
[백준/C++] 7576번 토마토 (0) | 2021.03.25 |
[백준/C++] 2178번 미로 탐색 (0) | 2021.03.25 |
[백준/C++] 1926번 그림 (0) | 2021.03.24 |