baekjoon/DP

백준 2579번 : 계단 오르기 자바

Meluu_ 2024. 8. 15. 17:50

🧫 문제 분석

✔️ 출처

계단 오르기 실버 3

 

📖 문제

 

dp 문제로

나올 수 있는 경우는 

1.  2칸을 점프해서 도달

2.  2칸 점프 + 한칸 앞으로 

인 경우 뿐이다. 

 

따라서 

	      // 2칸 점프 도달        2칸 점프 후 한칸 앞으로 
dp[i] = Math.max(dp[i-2] + stairs[i], dp[i-3] + stairs[i-1] + stairs[i])

 


🔅 문제 풀이

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());
        int[] stairs = new int[n + 1];
        int[] dp = new int[n + 1];

        for (int i = 1; i <= n; i++) {
            stairs[i] = Integer.parseInt(br.readLine());
        }

        dp[1] = stairs[1];
        if (n > 1) dp[2] = stairs[2] + dp[1];

        for (int i = 3; i <= n; i++) {
            dp[i] = Math.max(stairs[i - 1] + stairs[i] + dp[i - 3], dp[i-2] + stairs[i]);
        }

        bw.write(dp[n] + "\n");
        bw.flush();
        bw.close();
    }

}

 

 

 

❗ 오답노트 / 필요한 지식

  1. 문제를 잘 읽자.. 최솟값이 아니라 최댓값이다.