[boj] 2579 계단 오르기 python

2022. 2. 14. 17:34공부한 것 정리

반응형

한칸씩 연속 3회는 올라올 수 없음

-> i번째 계단 직전에 밟을 수 있는 경우의 수

1,1,2

1,2

2

1,1

1

-> "결국 직전칸에서 올라온 것 vs 2칸 전에서 올라온 것" 으로 식 세울 수 있음

import sys
input = sys.stdin.readline
n = int(input().strip())
stairs = [int(input().strip()) for _ in range(n)]
dp = [0 for _ in range(n+1)]

if n>=3:
    dp[0] = stairs[0]
    dp[1] = stairs[0]+stairs[1]
    dp[2] = max(stairs[0]+stairs[2],stairs[1]+stairs[2])

    for i in range(3,n):
        dp[i] = max( stairs[i-1]+dp[i-3]+stairs[i], dp[i-2],stairs[i] )
        		#max(직전칸의 값+3개 전 계단의 최댓값+현재값, 2개 전 계단의 최댓값 + 현재값)
    print(dp[-2])
else:
    if n==1: print(stairs[0])
    elif n==2: print(stairs[0]+stairs[1])
    elif n==3: print(max(stairs[0]+stairs[2],stairs[1]+stairs[2]))
반응형

'공부한 것 정리' 카테고리의 다른 글

[mySQL] 코테 대비 SQL 연습 사이트  (0) 2022.02.10