[백준] 점프 점프 (Java)
https://www.acmicpc.net/problem/14248
입력 : 첫째 줄 - 돌다리의 돌 개수 n (1 ≤ n ≤ 100,000)
둘째 줄 - 그 위치에서 점프할 수 있는 거리 Ai (1 ≤ Ai ≤ 100,000)
셋째 줄 - 출발점 s (1 ≤ s ≤ n)
출력 : 영우가 방문 가능한 돌들의 개수
O(n)
DFS
구현
import java.util.*;
public class Main {
static int n;
static int[] stones;
static boolean[] visited;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// n 입력
n = sc.nextInt();
// 돌들의 배열 입력
stones = new int[n];
for (int i = 0; i < n; i++) {
stones[i] = sc.nextInt();
}
// 방문 확인 배열 초기화
visited = new boolean[n];
// 시작 지점 입력 및 인덱스 조정
int start = sc.nextInt() - 1;
// DFS 실행
int result = dfs(start);
// 결과 출력
System.out.println(result);
sc.close();
}
// DFS 함수 정의
static int dfs(int index) {
// 이미 방문한 곳이면 0 리턴
if (visited[index]) {
return 0;
}
// 현재 위치 방문 처리
visited[index] = true;
int count = 1; // 현재 위치를 방문했으므로 1 카운트
// 왼쪽 점프
int left = index - stones[index];
if (left >= 0) {
count += dfs(left);
}
// 오른쪽 점프
int right = index + stones[index];
if (right < n) {
count += dfs(right);
}
return count;
}
}