백준 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

  1. 중학교 창의력 수학 경시대회 단골소재 계단 오르기. 한 계단 또는 두 계단이라는 표현은 질릴도록 봤다.
  2. case별로 쪼개서 점화식을 설정하고 풀어내면 된다. 전 단계를 밟는 경우와/밟지 않는 경우로 나누면 모든 경우를 커버할 수 있다.
    • max(points[i-2], points[i-3]+s[i-1]) 부분이 조금 까다롭긴 했는데 그외에는 무난한 문제였다.