본문 바로가기

Algorithm/BAEKJOON

[BOJ] 13549번 숨바꼭질 3 (C++)

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