Computer Science/Algorithm
[Baekjoon] DP - 2579 계단 오르기
ddu0422
2023. 9. 19. 11:03
문제
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
풀이
"""
1. 계단을 한 계단 씩 또는 두 계단씩 오를 수 있다.
2. 연속된 세 개의 계단을 모두 밟아서는 안된다.
3. 마지막 도착 계단은 반드시 밟아야한다.
d[n]: n번째 계단을 밟았을 때 최대 점수
OX | O
OXO | O
1. 직전 계단을 밟지 않은 경우
d[i - 2] + a[i]이다.
2. 직전 계단을 밟은 경우
d[i - 1]이 아닌 d[i - 3]인 이유는 d[i - 1]에서 직전 계단을 밟았을 때, 최대 점수일 수 있기 때문이다.
d[i - 3]의 최대 점수에서 a[i - 1] 계단과 a[i] 계단을 밟아야한다.
"""
import sys
n = int(sys.stdin.readline().rstrip())
a = [0]
for _ in range(n):
score = int(sys.stdin.readline().rstrip())
a.append(score)
def solution(n, a):
if n == 1:
return a[1]
d = [0] * (n + 1)
d[1] = a[1]
d[2] = a[1] + a[2]
for i in range(3, n + 1):
d[i] = max(d[i - 2], d[i - 3] + a[i - 1]) + a[i]
return d[n]
print(solution(n, a))
채점 결과