본문 바로가기
🥇Baekjoon Solutions/그래프(BFS, DFS, 다익스트라, 플로이드 와샬)

[C++] 백준 13549번: 숨바꼭질 3

by 코푸는 개발자 2021. 8. 23.
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;

bool check[150001];
int time[150001];

void bfs(int start,int end) {
	queue<int>q;
	q.push(start);
	check[start] = true;

	while (!q.empty()) {
		int x = q.front();
		q.pop();
		if (x == end) {
			cout << time[x];
			return;
		}

		if (2 * x < 150001 && (!check[2 * x] || time[2 * x] > time[x])) {
			check[2 * x] = true;
			time[2 * x] = time[x];
			q.push(2 * x);
		}
		if (x < 150001 && (!check[x + 1] || time[x + 1] > time[x] + 1)) {
			check[x + 1] = true;
			time[x + 1] = time[x] + 1;
			q.push(x + 1);
		}
		if (x - 1 >= 0 && (!check[x - 1] || time[x - 1] > time[x] + 1)) {
			check[x - 1] = true;
			time[x - 1] = time[x] + 1;
			q.push(x - 1);
		}
	}
}

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int s, d;

	cin >> s >> d;

	bfs(s, d);

	return 0;
}

 

728x90

댓글