본문 바로가기

알고리즘/백준

백준 13913 숨바꼭질 4

https://www.acmicpc.net/problem/13913

 

13913번: 숨바꼭질 4

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 ��

www.acmicpc.net

queue와 stack을 이용해서 풀었다.

 

/* 숨바꼭질 4 */

#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
#include <stack>

#define pp pair<int,int>

using namespace std;

int N, K;
int arr[200001];

void input();
void solve();

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

	input();
	solve();

	return 0;
}

void input() {
	cin >> N >> K;
	memset(arr, -1, sizeof(arr));
}

void solve() {
	queue<int> q;
	q.push(N);

	int t = 1;

	while (true) {

		int curr = q.front();
		q.pop();

		if (curr == K) {
			break;
		}

		if (curr - 1 >= 0 && arr[curr - 1] == -1) {
			arr[curr - 1] = curr;
			q.push(curr - 1);
		}
		if (curr + 1 <= 200000 && arr[curr + 1] == -1) {
			arr[curr + 1] = curr;
			q.push(curr + 1);
		}
		if (curr * 2 <= 200000 && arr[curr * 2] == -1) {
			arr[curr * 2] = curr;
			q.push(curr * 2);
		}
	}
	int idx = K;
	stack<int> s;
	s.push(idx);

	while (idx != N) {
		idx = arr[idx];
		s.push(idx);
	}

	cout << s.size() - 1 << '\n';
	while (!s.empty()) {
		cout << s.top() << " ";
		s.pop();
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 14425 문자열 집합  (0) 2020.08.25
백준 2437 저울  (0) 2020.08.23
백준 1963 소수 경로  (0) 2020.08.23
백준 11438 LCA2  (0) 2020.08.23
백준 1949 우수 마을  (0) 2020.08.23