2579 - 계단 오르기

Solution

code

#include <iostream>
#include <utility>
using namespace std;

int main()
{
    int N;
    cin >> N;
    int * arr = new int[N];
    for(int i = 0; i < N; i++)
        cin >> arr[i];
    
    pair<int, int> * ans = new pair<int, int>[N];
    ans[0].first = arr[0]; ans[0].second = arr[0];
    ans[1].first = arr[1] + arr[0]; ans[1].second = arr[1];
    for(int i = 2; i < N; i++)
    {
        ans[i].first = ans[i-1].second + arr[i];
        ans[i].second = (ans[i-2].first < ans[i-2].second) ? ans[i-2].second + arr[i] : ans[i-2].first + arr[i];
    }
    
    
    int answer = ans[N-1].first < ans[N-1].second ? ans[N-1].second : ans[N-1].first;
    cout << answer << endl;

    return 0;
}

ref

2579번: 계단 오르기