백준 - DP (#2579)

Eon·2020년 10월 7일
0

Algorithm

목록 보기
21/70

https://www.acmicpc.net/problem/2579
계단 오르는 데는 다음과 같은 규칙이 있다.
1. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.
2. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.
3. 마지막 도착 계단은 반드시 밟아야 한다.
각 계단에 쓰여 있는 점수가 주어질 때 이 게임에서 얻을 수 있는 총 점수의 최댓값을 구하는 프로그램을 작성하시오.

Code

n = int(input())
points = []
for i in range(n):
    points.append(int(input()))

if n < 3:
    print(sum(points))

else:
    dp = [0, points[0], points[0]+points[1]]
    for i in range(2,n):
        # 마지막 계단의 이전 계단을 안 밟는 경우
        case_1 = dp[i-1] + points[i]
        # 마지막 계단의 이전 계단을 밟는 경우
        case_2 = dp[i-2] + points[i-1] + points[i]

        dp.append(max(case_1,case_2))
        
    print(dp[n])
profile
👨🏻‍💻 🏃🏻‍♂️ 🎶

0개의 댓글