백준_2579_계단 오르기(DP)

맹민재·2023년 4월 3일
0

알고리즘

목록 보기
23/134
from sys import stdin

n = int(input())
n_list = [0] * n
for i in range(n):
    n_list[i] = int(stdin.readline().rstrip())

if n == 1:
    print(n_list[0])
elif n == 2:
    print(n_list[1] + n_list[0])
else:
    dp = [0] * n
    dp[0] = n_list[0]
    dp[1] = n_list[1] + dp[0]
    dp[2] = max(n_list[1]+n_list[2], n_list[0]+n_list[2])

    for i in range(3, n):
        dp[i] = n_list[i] + max(dp[i-3]+n_list[i-1], dp[i-2])

    print(dp[-1])

dp 계획을 잘 세워야하는 문제이다.
한 칸씩 가는건 연속으로 2번만 가능하고 그 뒤에는 반드시 두 칸을 이동해야한다.
그래서 3계단 까지는 반복문이 아닌 직접 초기 값을 넣어줘아야한다.
-> 그래야 두 칸 이동한 상태와 한 칸 이동한 상태에 대해서 최대 값을 구할 수 있기 때문이다.


profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글