Baekjoon Online Judge - 2579
Review
포도주 시식이랑 비슷한 문제.
포도주 시식이랑 다른 점은 무조건 마지막 칸을 밟아야 한다는 것이다.
경우는 총 두 가지 - 마지막 칸을 밟았을 때
- 이전 계단을 밟지 않은 경우
- 이전 계단을 밟을 경우
각각의 경우를 점화식으로 나타내면 다음과 같다.
- dp[i] = dp[i-2] + stair[i]
- dp[i] = dp[i-3] + stair[i] + stair[i-2]
여기서 dp[]는 점수의 최대값이 되고, stair[]는 계단의 점수다.
Code (JAVA)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import java.util.*;
public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] stair = new int[N + 1]; int[] dp = new int[N + 1]; for(int i = 1; i <= N; i++) { stair[i] = sc.nextInt(); } dp[0] = 0; dp[1] = stair[1]; dp[2] = dp[1] + stair[2]; for(int i = 3; i <= N; i++) { dp[i] = Math.max(dp[i-2] + stair[i], dp[i-3] + stair[i-1] + stair[i]); } System.out.println(dp[N]); sc.close(); } }
|