티스토리 뷰
문제 링크입니다 : 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 <vector>
#include <queue>
#define INF 987654321
using namespace std;
int N, K;
vector<int> board;
vector<bool> visited;
vector<int> visitTime;
inline int move(int pos, int command) {
switch(command) {
case 0:
return pos - 1;
break;
case 1:
return pos + 1;
break;
case 2:
return pos * 2;
break;
}
return -INF;
}
int bfs(int start) {
visitTime[start] = 0;
visited[start] = true;
priority_queue<pair<int, int>> pq;
pq.push({0, start});
while(!pq.empty()) {
int cur = pq.top().second;
int curTime = -pq.top().first;
pq.pop();
if(cur == K) {
return visitTime[K];
}
for(int dir = 0; dir < 3; dir++) {
int next = move(cur, dir);
int nextTime = (dir == 2) ? curTime : curTime + 1;
if(next < 0 || next >= 100001) continue;
if(visitTime[next] <= nextTime) continue;
visitTime[next] = nextTime;
pq.push({-nextTime, next});
}
}
return -1;
}
int main() {
cin >> N >> K;
board.assign(100001, 0);
visited.assign(100001, false);
visitTime.assign(100001, INF);
cout << bfs(N);
return 0;
}
개발 환경 : vscode
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
백준 - 12852 1로 만들기 2 (0) | 2020.06.27 |
---|---|
백준 - 17404 RGB거리 2 (0) | 2020.06.26 |
백준 - 12851 숨바꼭질 2 (0) | 2020.06.25 |
백준 - 2293 동전1 (0) | 2020.06.23 |
백준 - 1956 운동 (0) | 2020.06.22 |
댓글