반응형
https://www.acmicpc.net/problem/2579
위의 문제는 BaekJoon Online Judge의 단계별로 풀어보기 중 16단계
동적 계획법 1의 카테고리에 포함되어 있는 문제이다.
오랜만에 푸는 다이나믹 프로그래밍 문제이다.
마지막계단을 무조건 밟아야 할 때의 경우의 수를 찾아서 문제를 풀었다.
import java.util.Scanner;
public class Question_2579 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] stairs = new int[n+1];
int[] dp = new int[n+1];
for(int i = 1; i <= n; i++) {
stairs[i] = sc.nextInt();
}
dp[1] = stairs[1];
dp[2] = stairs[1] + stairs[2];
dp[3] = Math.max(stairs[1] + stairs[3], stairs[2] + stairs[3]);
for(int i = 4; i <= n; i++) {
dp[i] = Math.max(dp[i-2] + stairs[i], dp[i-3] + stairs[i-1] + stairs[i]);
}
System.out.println(dp[n]);
}
}
반응형
댓글