Python/BAEKJOON

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

Magin 2022. 3. 26. 16:46
728x90

문제)

 

알고리즘)

DP

계단의 수가 3개미만 일 경우 총 합이 최종 값이다.

 

그외)

n번째에 해당 계단마다 갈 수 있는 최댓값을 d[n]에 할당 한다.

해당 사이클을 반복 후 출력을 원하는 위치의 계단 값을 출력이 바로 최댓값이다.

 

 

코드)

#계단오르기
import sys

n = int(sys.stdin.readline()) #계단 갯수
stair = [] #계단 저장

for _ in range(n): #N개만큼 계단 생성
    stair.append(int(sys.stdin.readline()))

d = [0]*n #계단 갯수만큼 확보
d[0] = stair[0]

if n <3: #계단의 갯수가 3개미만일때
    d[n-1] = sum(stair)

else:
    for x in range(1,3):
        if x == 1: #두번째 계단
            d[x] = max(stair[x]+d[x-1], stair[x-1]) #두번째 계단까지 올라가는 최고의 값
            continue
        d[x] = max(stair[x]+stair[x-1], stair[x]+d[x-2])#3번째 계단까지 올라가는 최고의 값

    for i in range(3, n): #4번째계단부터
        d[i] = max(stair[i]+stair[i-1]+ d[i-3], stair[i]+d[i-2]) #i+1번째 계단까지 가는 최댓값

print(d[-1])
728x90