https://www.acmicpc.net/problem/2579
풀이
다이나믹 프로그래밍이라 점화식부터 정하고 풀기 시작했다.
N번째 계단까지의 최댓값
= max( (N-1)번째 계단까지의 최댓값(단, (N-2)번째는 포함되지 않아야 함) + N번째 계단의 값,
(N-2)번째 계단까지의 최댓값(단, (N-3)번째 포함 여부는 상관 없음) + N번째 계단의 값)
직전 값의 전 값도 중요하기 때문에
dp 리스트 요소를 (0, 0) 형태로 잡았다.
점화식:
dp[N] = (dp[N-1][1] + N번째 값, max(dp[N-2][0], dp[N-2][1]) + N번째 값)
# 계단 오르기
N = int(input())
stairs = [0]
for i in range(N):
stairs.append(int(input()))
dp = [(0, 0) for _ in range(N+1)]
dp[1] = (stairs[1], stairs[1])
if N > 1:
dp[2] = (dp[1][1] + stairs[2], stairs[2])
for i in range(3, N+1):
dp[i] = (dp[i-1][1] + stairs[i], max(dp[i-2][0], dp[i-2][1]) + stairs[i])
print(max(dp[N]))
'공부하자! > 알고리즘' 카테고리의 다른 글
프로그래머스 | 롤케이크 자르기 파이썬 (0) | 2022.11.06 |
---|---|
프로그래머스 124 나라의 숫자 - 파이썬 (0) | 2022.06.12 |
백준 1463 1로 만들기 파이썬 - 다이나믹 프로그래밍(DP), 동적 계획법 (0) | 2022.02.26 |
백준 14502 연구소 파이썬 - DFS, BFS (0) | 2022.02.19 |
백준 2309 일곱 난쟁이 파이썬 (0) | 2021.11.04 |