[BaekJoon] 백준 13549번 숨바꼭질 3
문제: https://www.acmicpc.net/problem/13549
내코드
- 기존의 bfs랑 약간 다른 문제
- 그렇게 쉽지도 어렵지도 않은 문제
- 전에 풀었던 [BaekJoon] 백준 1697번 숨바꼭질 문제와 내용은 비슷하지만 priority queue를 이용해서 순간이동 하는 경우를 따로 처리해줘야하는 점이 달랐다.
- 순간이동하는 경우 시간이 소요되지 않기 때문에 고려해서 priority queue를 사용해주면 된다.
#include <iostream>
#include <queue>
#include <utility>
#define MAXNUM 100001
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
int n, k; cin >> n >> k;
bool visited[MAXNUM] = { false, };
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> qu;
qu.push(make_pair(0, n));
visited[n] = true;
while (!qu.empty()) {
int sec = qu.top().first;
int loc = qu.top().second;
qu.pop();
if (loc == k) {
cout << sec;
return 0;
}
if (loc * 2 < MAXNUM && visited[loc * 2] == false) {
qu.push(make_pair(sec, loc * 2));
visited[loc * 2] = true;
}
if (loc + 1 < MAXNUM && visited[loc + 1] == false) {
qu.push(make_pair(sec + 1, loc + 1));
visited[loc + 1] = true;
}
if (loc - 1 >= 0 && visited[loc - 1] == false) {
qu.push(make_pair(sec + 1, loc - 1));
visited[loc - 1] = true;
}
}
return 0;
}
참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 11729번 하노이 탑 이동 순서 (0) | 2021.01.26 |
---|---|
[BaekJoon] 백준 1629번 곱셈 (0) | 2021.01.24 |
[BaekJoon] 백준 6593번 상범 빌딩 (0) | 2020.05.29 |
[BaekJoon] 백준 5014 스타트링크 (0) | 2020.05.24 |
[BaekJoon] 백준 2146번 다리 만들기 (0) | 2020.05.17 |