백준 계단 오르기 코드 및 해설 (파이썬)
2021. 11. 11. 16:48ㆍalgorithm
반응형
https://www.acmicpc.net/problem/2579
다이나믹 프로그래밍 문제..
점화식 세우는 게 너무 어렵다
dp[i] = max(dp[i-2]+scores[i], dp[i-3]+scores[i-1]+scores[i])
이게 아니라
dp[i] = max(dp[i-2]+scores[i], dp[i-3]+scores[i-1]+scores[i], dp[i-1]) 가 아닌가?! 하는 오해가 있었는데
(불리하면 현재 계단을 밟지 말아야 한다고 생각해서)
한 번에 2개 이상의 계단을 뛰어넘을 수 없어서 위의 점화식이 맞다고 한다..
import sys
N = int(sys.stdin.readline())
scores = []
for _ in range(N):
scores.append(int(sys.stdin.readline()))
if N < 3:
print(sum(scores))
else:
dp = [0] * N
dp[0] = scores[0]
dp[1] = scores[0] + scores[1]
dp[2] = max(scores[0]+scores[2], scores[1]+scores[2])
for i in range(3,N):
dp[i] = max(dp[i-2]+scores[i], dp[i-3]+scores[i-1]+scores[i])
print(dp[-1])
반응형
'algorithm' 카테고리의 다른 글
백준 포도주 시식 코드 및 해설 (파이썬) (0) | 2021.11.09 |
---|---|
백준 컨베이어 벨트 위의 로봇 코드 및 해설 (파이썬) (0) | 2021.11.08 |
백준 미세먼지 안녕! 코드 및 해설 (파이썬) (0) | 2021.11.03 |
백준 색종이 코드 및 해설 (파이썬) (0) | 2021.11.03 |
프로그래머스 모음사전 코드 및 해설 (파이썬) (0) | 2021.11.03 |