계단 오르기 2579

LJM·2023년 3월 16일
0

백준풀기

목록 보기
144/259

https://www.acmicpc.net/problem/2579

강의를 보고 서야 풀수 있었다;;
너무 어렵다 후..

단순히 최대값을 dp 에 담아서 구하면 되겠지 하고 했는데 안된다
2차원 dp배열을 만들고 이전에 건너뛰어 온건지, 연속해서 밟은건지를 저장해야한다

import java.io.*;
public class Main
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        int[] arr = new int[N];

        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        if(N == 0)
        {
            System.out.println(0);
            return;
        }
        else if(N == 1)
        {
            System.out.println(arr[0]);
            return;
        }
        else if(N == 2)
        {
            System.out.println(arr[0]+arr[1]);
            return;
        }

        int[][] dp = new int[N][2];
        dp[0][0] = arr[0];
        dp[0][1] = arr[0];
        dp[1][0] = arr[1];
        dp[1][1] = arr[0] + arr[1];

        for (int i = 2; i < N; i++)
        {
            dp[i][0] = Math.max(dp[i-2][0], dp[i-2][1]) + arr[i];
            dp[i][1] = dp[i-1][0] + arr[i];
        }

        System.out.println(Math.max(dp[N-1][0], dp[N-1][1]));
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글