[BOJ2579] 계단 오르기
Updated:
총 점수의 최댓값 구하기
- 계단 밟으며 점수 얻기
- 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.
- 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.
- 마지막 도착 계단은 반드시 밟아야 한다.
입력
- 계단 갯수 (<= 300)
- 순서대로 제일 아래에 놓인 계단부터 점수 (<= 10,000)
출력
- 얻을 수 있는 총 점수의 최대값
설계
- dp[i] 는 i 번째 계단의 최댓값
- dp[i] = max(stair[i] + stair[i-1] + dp[i-3], stair[i] + dp[i-2])
피드백
- 3번째 인덱스 전까지의 dp 값을 어떻게 넣을지 고민
- 계단 점수 배열을 1부터 시작했을 때(마지막 인덱스 N), 0번의 점수는 0
- 이 때, dp[1] = stair[1] / dp[2] = stair[1] + stair[2]
- 계단 점수 배열을 0부터 시작했을 때(마지막 인덱스 N-1)
- dp[0] = stair[0] / dp[1] = stair [0]+ stair[1] / dp[2] = max(stair[0] + stair[2], stair[1] + stair[2])
How I solved(click to github)
ref :
BOJ2579
Leave a comment