현제의 현재이야기

<2022모각코/TIL> [백준/python] 2579- 계단오르기 본문

algorithm/HUFS 2022 하계 모각코

<2022모각코/TIL> [백준/python] 2579- 계단오르기

현재의 현제 2022. 8. 18. 16:29
n = int(input())
stair = [int(input()) for _ in range(n)]
dp = [0] * n

dp[0] = stair[0]

if n > 1:
    dp[1] = stair[0] + stair[1]
    if n > 2:
        dp[2] = max(stair[1] + stair[2], stair[0] + stair[2])
        if n > 3:
            for i in range(3, n):
                dp[i] = max(dp[i - 3] + stair[i - 1] + stair[i], dp[i - 2] + stair[i])

print(dp[n-1])

알고리즘:

1. Stair 배열을 받고, DP배열도 n개로 만듦

2. dp[1]은 2번째 칸이므로 그냥 1번쨰 2번째 두개 더한 것이 최대

3. dp[2] 는 23번째 칸과 13번째 칸의 최대를 구함

4. dp[3]부터는 두가지 로 나눔. 첫번째는 i번째 칸의 전을 밟은 것과, i번째 칸의 전전을 밟은 것. 전을 밟은 것은 전전을 밟을 수 없기때문에 dp[i - 3]을 더해주고, 전전칸을 밟는 것은 그냥 dp[i - 2] 를 해줆.

 

dp를 정확하게 이해할 수 있었던 문제였다.

Comments