백준 2579번: 계단 오르기


[www.acmicpc.net/problem/2579]

#풀이


- 동적 계획법

1. 현 계단 위치에서 항상 다음 계단으로 올라갈 수 있는 상태로 만든다.

2. n-1 번째 계단에서 한 칸 올라간 후 와 마지막 계단을 비교하여 최댓값을 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
input = lambda : sys.stdin.readline().rstrip()
 
n=int(input())
stair=[0]
for _ in range(n):
    stair.append(int(input()))
#dp를 담을 배열(shallow copy)
dp=stair[:]
 
for i in range(0,n-1):
    if i+2<=n:
        #현재 위치에서 두칸 올라가기
        dp[i+2]=max(dp[i+2],stair[i+2]+dp[i])
    if i+3<=n:
        #현재 위치에서 한칸 올라가고 다시 두칸 올라가기
        dp[i+3]=max(dp[i+3],stair[i+3]+stair[i+1]+dp[i])
 
#max(마지막 계단, n-1번째 계단 에서 한칸 올라가기)
print(max(dp[n],stair[n]+dp[n-1]))
cs


댓글 쓰기

Post a Comment (0)

다음 이전