문제를 풀기 위해 마지막 번째 계단에 도착하는 경우의 수를 따져보았다.
조건 2(3연속 불가) 때문에 에 도착하는 방법은 딱 두 가지뿐이다.
dp[n-2] + arr[n]dp[n-1]을 그대로 더해버리면 안 된다. 만약 계단도 에서 1칸 올라온 거라면, 이 되어 3연속 밟기 위반이 된다.dp[n-3] + arr[n-1] + arr[n]위 두 경우 중 더 큰 값을 선택하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int[] arr = new int[n+1];
int[] dp = new int[n+1];
for(int i=1; i<=n; i++) {
st = new StringTokenizer(br.readLine());
arr[i] = Integer.parseInt(st.nextToken());
}
dp[1] = arr[1];
if(n <= 1) {
System.out.println(dp[1]);
return;
}
dp[2] = dp[1] + arr[2];
if(n <= 2) {
System.out.println(dp[n]);
return;
}
for(int i=3; i<=n; i++) {
int cost = arr[i];
dp[i] = cost + Math.max(dp[i-2], arr[i-1] + dp[i-3]);
}
System.out.println(dp[n]);
}
}