이번 문제는 깊이우선탐색을 통해 해결하였다. 현재의 위치에서 갈 수 있는 왼쪽과 오른쪽의 인덱스를 저장하고 왼쪽, 오른쪽 인덱스가 돌다리 범위 내에 존재하고 아직 방문하지 않은 경우에 방문하도록 재귀함수를 호출하는 방식으로 접근하였다. 그리고 마지막에 방문처리 리스트를 보면서 방문처리된 개수를 출력하였다.
visited[cur]
을 True로 갱신한다.cur-arr[cur]
을 저장한다.cur+arr[cur]
을 저장한다.visited[left]
가 False일 경우 dfs(left)
를 재귀호출한다.visited[right]
가 False일 경우 dfs(right)
를 재귀호출한다.dfs(s-1)
을 호출한다. (인덱스는 0부터 시작하므로 s가 3이라면 인덱스 2부터 시작해야함. 그러므로 s-1 사용)def dfs(cur):
visited[cur]=True
left=cur-arr[cur]
right=cur+arr[cur]
if left>=0 and visited[left]==False:
dfs(left)
if right<n and visited[right]==False:
dfs(right)
n=int(input())
arr=list(map(int, input().split()))
s=int(input())
visited=[False for _ in range(n)]
dfs(s-1)
print(visited)
print(visited.count(True))