백준 2579번

김가람·2023년 3월 21일
0

1. 문제

2579번

2. 코드

N = int(input())
num_ = [int(input()) for _ in range(N)]
dp = [0] * 999 # 각 계단에 도착했을 때 최댓값 저장하기 위한 공간
dp[0] = num_[0] # 첫번째 계단은 경우의 수 1개
if N > 1: # 계단 수 2개일 때
    dp[1] = dp[0] + num_[1] 
    if N > 2: # 계단 수 3개일 때
        dp[2] = max(dp[0] + num_[2], num_[1] + num_[2])
        if N > 3: # 계단 수 4개 이상일 때
            dp[1] = max(num_[0] + num_[1], num_[2])
            dp[2] = max(num_[0] + num_[2], num_[1] + num_[2])
            for i in range(3,N):
                # i번째 계단에 반드시 도착해야할 때
                # 1) i-2 번째 계단을 밟고 올라오는 경우 : i-2 번째까지 누적 최댓값 + i 번째 값
                # 2) i-1 번째 계단을 밟고 올라오는 경우 : i-3 번째까지 누적 최댓값 + i-1 ~ i 번째 값
                dp[i] = max(dp[i-2] + num_[i], dp[i-3] + num_[i-1] + num_[i])
print(dp[N-1])
profile
부캐:데이터 사이언티스트가 되고 싶은 반도체 공장 노예

0개의 댓글