[백준] P2579

동민·2021년 3월 11일
0
import java.util.Scanner;

public class P2579 {
	public static void main(String[] args) { // DP
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt(), step[] = new int[301], dp[] = new int[301];
		for (int i = 0; i < n; i++) {
			step[i] = sc.nextInt();
		}
		dp[0] = step[0];
		dp[1] = step[0] + step[1];
		dp[2] = Math.max(step[0] + step[2], step[1] + step[2]); // dp[2]는 시작점->0번째계단->2번째계단의 합과 시작점->1번째계단->2번째계단의 합 중 최대값으로 초기화; dp[2]는 연속으로 3칸을 올라오는 경우가 없음 
		
		for(int i = 3; i < n; i++) {
			dp[i] = Math.max(dp[i-2] + step[i], dp[i-3] + step[i-1] + step[i]); // 두칸 뒤에서 올라오는 것, 한칸 뒤에서 올라오는것(연달아서 3칸을 올라올 수 없기 때문에 [i-3]+[i-1]) 중 최대값을 저장
		}
		
		System.out.println(dp[n - 1]);
		sc.close();
	}

	/*	DFS 접근 시간조촤
	 
		private static int answer = 0;
		public static void main(String[] args) {
			Scanner sc = new Scanner(System.in);
			int n = sc.nextInt(), step[] = new int[n];
			for (int i = 0; i < n; i++) {
				step[i] = sc.nextInt();
			}
			dfs(step, 0, 0, 0);
			System.out.println(answer);
			sc.close();
		}
	
		private static void dfs(int[] step, int current, int index, int cnt) {
			
			if (cnt == 3 || index >= step.length - 1) {
				if (index == step.length - 1 && current > answer) {
					answer = current + step[index];
				}
				return;
			}
	
			dfs(step, current + step[index], index + 1, cnt + 1);
			dfs(step, current + step[index], index + 2, 1);
		}
		
	 */
}
profile
BE Developer

0개의 댓글