문제
풀이
- 일렬로 나열된 그래프에서 해당 노드(위치)에 적힌 수만큼 좌, 우로 이동할 수 있다.
- 총 이동가능 횟수를 구하는 문제이다.
- 효율적인 그래프 탐색을 위해 bfs 알고리즘을 이용하였으며 이를 위해 큐를 구현했다.
코드
from collections import deque
import sys
input = sys.stdin.readline
def bfs(start: int) -> int:
queue = deque()
queue.append(start)
graph[start] = True
while queue:
x = queue.popleft()
for location in [x - ai[x], x + ai[x]]:
if 0 <= location < n:
if graph[location] == False:
queue.append(location)
graph[location] = True
return sum([1 for x in graph if x])
if __name__ == '__main__':
n = int(input())
ai = list(map(int, input().split()))
graph = [False] * n
s = int(input()) - 1
print(bfs(s))
결과
출처 & 깃허브
boj 14248
Github