PS/BOJ
백준 14248번: 점프 점프 (C++)
도비(Doby)
2022. 6. 16. 22:35
https://www.acmicpc.net/problem/14248
14248번: 점프 점프
첫 번째 줄에는 돌다리의 돌 개수 n이 주어진다.(1≤n≤100,000) 돌의 번호는 왼쪽부터 1번에서 n번이다. 다음 줄에는 그 위치에서 점프할 수 있는 거리 Ai가 주어진다.(1≤Ai≤100,000) 다음 줄에는 출
www.acmicpc.net
Solved By: BFS
#include <iostream>
#include <vector>
#include <queue>
#define MAX 100001
using namespace std;
vector<int> arr(MAX, 0);
int n, s;
int bfs(int node){
int cnt = 0;
cnt++;
queue<int> q;
q.push(node);
vector<bool> visited(n + 1, false);
visited[node] = true;
//cout << node << '\n';
while(!q.empty()){
int now = q.front();
q.pop();
if(now - arr[now] >= 1 && !visited[now - arr[now]]){
visited[now - arr[now]] = true;
q.push(now - arr[now]);
//cout << now - arr[now] << '\n';
cnt++;
}
if(now + arr[now] <= n && !visited[now + arr[now]]){
visited[now + arr[now]] = true;
q.push(now + arr[now]);
//cout << now + arr[now] << '\n';
cnt++;
}
}
return cnt;
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++) cin >> arr[i];
cin >> s;
cout << bfs(s);
return 0;
}