개발/algorithm

[백준 2579번] 계단 오르기 -python

zzi_on2 2022. 2. 14. 14:23

문제 링크

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

 

2579번: 계단 오르기

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

www.acmicpc.net

풀이 

- dp 문제

- 앞으로 어떤 계단을 밟은 것인가 가 아니라 어떤 계단을 밟고 올라왔는가 라고 생각

- 바로 한칸 전 n-1 계단을 밟고 온 경우, 세 칸 연속 밟고 올 수 없으므로 그 이전 계단은 n-3계단 

- 두칸 전 n-2계단을 밟고 온 경우

- 점화식 

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

n = int(input())

data = []

for _ in range(n):
  data.append(int(input()))

if n == 1 :
  print(data[0])
else :

  dp = [0] * n 

  dp[0] = data[0]
  dp[1] = data[0] + data[1]

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

  print(dp[n-1])