코딩하는 해맑은 거북이
[Python] 계단 오르기 - 백준 (DP) 본문
해당 글은 백준 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