728x90
반응형
https://www.acmicpc.net/problem/13549
13549번: 숨바꼭질 3
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
#include <iostream>
#include <queue>
using namespace std;
int n, k;
bool visited[100001];
int bfs(){
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
visited[n] = true;
q.push({0, n});
while(!q.empty()){
int t = q.top().first;
int c = q.top().second;
q.pop();
if(c == k) return t;
if(c * 2 <= 100000 && !visited[c * 2]){
q.push({t, c * 2});
visited[c * 2] = true;
}
if(c + 1 <= 100000 && !visited[c + 1]){
q.push({t + 1, c + 1});
visited[c + 1] = true;
}
if(c - 1 >= 0 && !visited[c - 1]){
q.push({t + 1, c - 1});
visited[c - 1] = true;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> k;
cout << bfs() << endl;
return 0;
}
우선순위 큐를 통해 bfs로 풀었다.
경과시간이 짧을수록 우선순위를 갖도록 우선순위 큐를 정의하고, 동생이 있는 위치를 찾으면 경과시간을 리턴한다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 1504번 특정한 최단 경로 (C++) (0) | 2022.11.01 |
---|---|
[BOJ] 14267번 회사 문화 1 (C++) (0) | 2022.09.06 |
[BOJ] 2109번 순회강연 (C++) (0) | 2022.08.21 |
[BOJ] 1874번 스택 수열 (C++) (0) | 2022.08.18 |
[BOJ] 2573번 빙산 (C++) (0) | 2022.08.17 |