뭔가 요새 DFS로 풀릴것 같으면 DFS하는 습관이 생겼다.
import sys
input = sys.stdin.readline
N = int(input())
A = list(map(int,input().split()))
check = [False] * 1200
ans = []
v = 0
cnt = 0
def DFS(v,cnt):
if v>=N-1:
ans.append(cnt)
return
if A[v]==0:
return
for i in range(1,A[v]+1):
if not check[v+i] and not v+i>N-1:
check[v+i] = True
DFS(v+i,cnt+1)
check[v+i] = False
check[0]=True
DFS(0,0)
print(min(ans) if ans else -1)
당연히 시간 초과
N = int(input())
li = list(map(int, input().split()))
dp = [N+1]*N
dp[0] = 0
for i in range(N):
for j in range(1, li[i]+1):
if i+j >= N:
break
dp[i+j] = min(dp[i+j], dp[i]+1)
print(dp[N-1] if dp[N-1] != N+1 else -1)
dp로 하면 간단하다.
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 2448 별찍기(11) (0) | 2021.07.19 |
---|---|
[백준][Python] 17123 배열놀이 (0) | 2021.07.17 |
[백준][Python] 2447 별찍기 (0) | 2021.07.17 |
[백준][Python] 9242 폭탄해제 (0) | 2021.07.17 |
[백준][Python] 4446 ROT12 (1) | 2021.07.17 |