GitHubSeob

C++ / 백준 / 1697 / 숨바꼭질 본문

Baekjoon/Silver

C++ / 백준 / 1697 / 숨바꼭질

GitHubSeob 2021. 9. 12.

문제

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

 

1697번: 숨바꼭질

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

www.acmicpc.net

문제풀이

BFS를 이용해 풀었다.

방문 함수를 만들어 같은 곳을 재방문하지 않도록 했다.

2열짜리 큐를 만들어 현재 위치, 몇번 이동했는지를 나타낸다.

점은 100,000까지 있으므로 더 넘지 못하고, 각각 제한을 걸어 효율적으로 이동할 수 있게 한다.

 

코드

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<bool>visit(100001, false);
int K;

void Move(int x, int sec) {
	queue<pair<int, int>> q;
	q.push({ x,sec });
	while (!q.empty()) {
		x = q.front().first;
		sec = q.front().second;
		q.pop();
		if (x == K) {
			cout << sec;
			return;
		}		
		else if (!visit[x]) {
			visit[x] = true;
			if (x * 2 <= 100000 && x < K)
				q.push({ x * 2,sec + 1 });
			if (x < K)
				q.push({ x + 1,sec + 1 });
			if (x > 0)
				q.push({ x - 1,sec + 1 });
		}
	}	
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int N = 0;
	cin >> N >> K;
	Move(N, 0);
}

'Baekjoon > Silver' 카테고리의 다른 글

C++ / 백준 / 3184 / 양  (0) 2021.09.24
C++ / 백준 / 2251 / 물통  (0) 2021.09.18
C++ / 백준 / 10971 / 외판원 순회2  (0) 2021.09.09
C++ / 백준 / 10819 / 차이를 최대로  (0) 2021.09.09
C++ / 백준 / 1476 / 날짜 계산  (0) 2021.09.08