코딩하는 해맑은 거북이

[Python] 계단 오르기 - 백준 (DP) 본문

코딩테스트

[Python] 계단 오르기 - 백준 (DP)

#CJE 2022. 12. 21.
해당 글은 백준 2579번 문제 '계단 오르기'를 다룬다.

문제

https://www.acmicpc.net/problem/2579

 

2579번: 계단 오르기

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점

www.acmicpc.net

 

설명

해당 문제는 동적 계획법 알고리즘으로 풀 수 있는 문제이다.

마지막 n번째 계단은 반드시 밟아야 하므로, 마지막 n번째 계단을 밟을때

1) n-1번째 계단을 밟지 않는 경우, n-2번째 계단을 밟는다.

2) n-1번째 계단을 밟는 경우, n-2번째 계단을 밟지 않는다.

즉, 점화식은 아래와 같이 표현된다.

dp[i] = max(stairs[i]+dp[i-2], stairs[i]+stairs[i-1]+dp[i-3])

 

코드

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

dp = [0]*n
dp[0] = stairs[0]
if n > 1:
    dp[1] = max(stairs[1]+dp[0], stairs[1])
if n > 2:
    dp[2] = max(stairs[2]+dp[0], stairs[2]+stairs[1])

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

print(dp[n-1])

     

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 분수 합 - 백준  (0) 2022.12.23
[Python] 요세푸스 문제 - 백준  (0) 2022.12.22
[Python] 사탕 게임 - 백준 (완전탐색)  (0) 2022.12.21
[Python] 30 - 백준  (0) 2022.12.20
[Python] 카드2 - 백준  (0) 2022.12.20
Comments