본문 바로가기
코딩테스트_백준풀이

숨바꼭질 #1697 c++ 풀이

by wanna_dev 2023. 10. 26.

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

 

1697번: 숨바꼭질

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

www.acmicpc.net

n에서 k로 가는 최단경로는 BFS를 사용하여 구현할 수 있다.

 

문제는, N에서 K까지 도달하는데 총 몇번 걸렸어? 이다. 이동할때마다 누적해줘야한다.

노드마다 최단거리를 구할수 있다.

 

조금 달랐던 점은 그래프를 초기화하지 않고 그냥 이어져 있다고 가정하는 것이다.

#include <iostream>
#include <string>
#include <cmath> 
#include<vector>
#include<queue>
#include<map>

using namespace std;





//int Graph[101][101];
int visited[100001]; 


int N, K;

void bfs(int start) {


	queue<pair<int, int>> q;
	q.push(make_pair(start, 0));

	visited[start] = 1;

	while (!q.empty())
	{
		int curr = q.front().first;
		int cnt = q.front().second;
		q.pop();
		if (curr == K) {
			cout << cnt;
			break;
		}
		if (curr + 1 >= 0 && curr + 1 < 100001) {
			if (visited[curr + 1] == 0) {
				visited[curr + 1] = 1;
				q.push(make_pair(curr + 1, cnt + 1));
			}
		}
		if (curr - 1 >= 0 && curr - 1 < 100001) {
			if (visited[curr - 1]==0) {
				visited[curr - 1] = 1;
				q.push(make_pair(curr - 1, cnt + 1));
			}


		}
		if (curr * 2 >= 0 && curr * 2 < 100001) {
			if (visited[curr * 2]==0) {
				visited[curr * 2] = 1;
				q.push(make_pair(curr * 2, cnt + 1));
			}
		}
	}

	
}
int main() {

	cin >> N >>K;


	bfs(N);

	return 0;
}

'코딩테스트_백준풀이' 카테고리의 다른 글

경로찾기 #11403 c++ 풀이  (1) 2023.10.27
DSLR #9019 c++ 풀이  (0) 2023.10.26
리모컨 #1107 c++ 풀이  (0) 2023.10.24
DFS와 BFS #1260 c++ 풀이  (1) 2023.10.24
유기농 배추 #1012 c++ 풀이  (0) 2023.10.24