[boj] (s3) 2579 계단 오르기

강신현·2022년 4월 19일
0

✅ DP

문제

링크


1. 문제 접근 및 해결 로직

  • 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.
  • 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.
  • 마지막 도착 계단은 반드시 밟아야 한다.

즉, nn층에 오를 수 있는 경우는 n2n-2층에서
1. 한칸씩 두번 오르는 경우
2. 두칸을 한번에 오르는 경우
두가지이다.

f(n)f(n) 은 각 계단에 쓰여 있는 점수가 주어질 때 얻을 수 있는 총 점수의 최댓값 라고 할때
f(n)f(n)n2n-2 에서 한칸씩 두번 오르는 경우와 두칸을 한번에 오르는 경우 두가지이므로 n1n-1 계단을 거치고 온 경우와 거치지 않고 온 경우라고 볼 수 있다.
따라서 f(n)f(n)f(n1)f(n-1)f(n2)f(n-2) 를 더한 값이다

  • 정의
    f(n)f(n) : 각 계단에 쓰여 있는 점수가 주어질 때 얻을 수 있는 총 점수의 최댓값
    stair[n]stair[n] : nn층 계단의 점수
  • 구하는 답
    f(n)f(n)
  • 초기값
    f(0)=0f(0)=0
    f(1)=stair[1]f(1)=stair[1]
    f(2)=max(stair[1]+stair[1],stair[2])f(2)=max(stair[1]+stair[1], stair[2])
  • 점화식
    f(n)=f(n1)+f(n2)f(n)=f(n-1)+f(n-2)

2. 코드

3. 시간 복잡도 분석

경우의 수를 모두 구하므로
O(N)O(N)

4. 문제에서 중요한 부분

DP문제는 점화식을 도출하는 것이 중요하다.
Bottm Up(반복문)으로 풀지 Top Down(재귀)으로 풀지는 선택사항

profile
땅콩의 모험 (server)

0개의 댓글