-

DP :: 백준 :: 계단 오르기 :: 2579 본문

알고리즘/DP

DP :: 백준 :: 계단 오르기 :: 2579

lingi04 2016. 11. 2. 14:45



[문제 풀이]

i번째 계단을 밟았을 때 최댓값은 두 경우

  - i-2번째 계단 밟고 i번째 밟을 경우

  - i-1번째 계단 밟고 i번째 밟을 경우

중 최댓값을 고르면 답!!??

이 아니라 틀린다!!


2번조건 "연속된 세 개의 계단을 밟으면 안된다"는 조건이 있기 때문이다!


자, 그러면 어떻게 풀어야 할까?

일단 2차원 배열을 생성한다.


i번째 계단을 밟았을 때 

  1) 1번 연속으로 밟은 경우 : dp[1][i]

  2) 2번 연속으로 밟은 경우 : dp[2][i]

두 경우로 나눌 수 있다!


이때, 

1) i번째 계단을 1번 연속으로 밟기 위해서는 i-2번째 계단에서 2칸 이동하는 방법밖에 없으므로

        dp[1][i] = max(dp[1][i-2], dp[2][i-2])+score[i]

   이렇게 계산할 수 있고

2) i번째 계단을 2번 연속으로 밟기 위해서는 i-1번째 계단에서 1칸 이동하는 방법밖에 없으므로

        dp[2][i] = dp[1][i-1]+score[i]

   이렇게 계산할 수 있다.

i번까지 모두 계산한 후

max(dp[1][i], dp[2][i]) 출력하면 끝!!





'알고리즘 > DP' 카테고리의 다른 글

DP :: 백준 :: 1학년 :: 5557  (0) 2016.11.04
DP :: 백준 :: 숫자삼각형 :: 1932  (0) 2016.11.02
DP :: 백준 :: 이친수 :: 2193  (0) 2016.11.02
DP :: 백준 :: 1로 만들기 :: 1463  (0) 2016.11.02
DP :: 백준 :: RGB거리 :: 1149  (0) 2016.11.02
Comments