백준 2579번 바로가기
나의 풀이#
s = []
for _ in range(n:=int(input())):
s.append(int(input()))
points = [0]*n
if n < 3:
print(sum(s))
else:
points[0] = s[0]
points[1] = s[0] + s[1]
points[2] = max(s[1]+s[2],s[0]+s[2])
for i in range(3,n):
points[i] = max(points[i-2], points[i-3]+s[i-1]) + s[i]
print(points[-1])
CODE REVIEW#
- 중학교 창의력 수학 경시대회 단골소재 계단 오르기.
한 계단 또는 두 계단
이라는 표현은 질릴도록 봤다.
- case별로 쪼개서 점화식을 설정하고 풀어내면 된다. 전 단계를 밟는 경우와/밟지 않는 경우로 나누면 모든 경우를 커버할 수 있다.
max(points[i-2], points[i-3]+s[i-1])
부분이 조금 까다롭긴 했는데 그외에는 무난한 문제였다.