반응형
https://www.acmicpc.net/problem/2579
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
해결 방법 : 다이나믹 프로그래밍
- 기본적인 DP문제이지만, 계단을 3개 연속으로 밟을 수 없다는 조건만 고려해주면 된다.
- 연속으로 밟아진 경우를 따로 고려하지 않아도 되도록 점화식 자체에 n-1번째 DP테이블 값을 참조하지 않고, n-2, n-3번째 DP테이블 값을 사용한다.
- 점화식 : dp[n] = max(dp[n-2] + stairs[n], dp[n-3] + stairs[n-1] + stairs[n])
import sys
input = sys.stdin.readline
def solution(n, stairs):
if n == 1: return stairs[0]
d = [0 for i in range(n + 1)] # DP 테이블
d[0], d[1], d[2] = 0, stairs[0], stairs[0] + stairs[1] # 초기값
for i in range(3, n + 1):
d[i] = max(d[i-2] + stairs[i-1], d[i-3] + stairs[i-2] + stairs[i-1])
return d[n]
if __name__ == '__main__':
n = int(input())
stairs = []
for i in range(n):
stairs.append(int(input()))
result = solution(n, stairs)
print(result)반응형
'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글
| 백준 1029 : 그림 교환 (0) | 2021.05.16 |
|---|---|
| 백준 2098 : 외판원 순회 (0) | 2021.05.16 |
| 백준 11727 : 2 * n 타일링 2 (feat. 11726 : 2 * n 타일링) (0) | 2021.05.13 |
| 백준 1013 : Contact (0) | 2021.05.11 |
| 기둥과 보 설치* (0) | 2021.05.11 |