🖥️ CS/Baekjoon Algorithms

#2579번 계단 오르기 (C++)

한국의 메타몽 2020. 5. 18. 16:31

참고 자료 : https://kwanghyuk.tistory.com/4

 

[백준 2579번] 계단 오르기

DP로 분류된 문제 조건 1. 계단을 오를때는 1칸 또는 2칸까지 한번에 오를수있다. 2. 연속된 3칸은 오를 수 없다. 3. 마지막 계단은 무조건 밟아야한다. 풀이 마지막 계단을 무조건 밟아야한다면 두�

kwanghyuk.tistory.com

#include <iostream>
using namespace std;

int max (int a, int b){ return a>b?a:b; } 

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int stair[301], dp[301];

    int N = 0;
    cin >> N;

    for(int i=0; i<N; i++){cin >> stair[i];}

    dp[0] = stair[0];
    dp[1] = max(stair[0]+stair[1], stair[1]);
    dp[2] = max(stair[0]+stair[2], stair[1]+stair[2]);

    for(int i=3; i<N; i++){
        dp[i] = max(dp[i-2]+stair[i], stair[i-1]+stair[i]+dp[i-3]);
    }
    
    cout << dp[N-1];

    return 0;
}

아직 Memoization을 제대로 이해하지 못한 탓에, 필수적인 조건문을 세우기가 어렵다.

남의 것을 보며 공부하는 한이 있어도 지식을 내 것으로 만들도록 노력해야겠다. 

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

#2960번 에라토스테네스의 체 (C++)  (0) 2020.05.20
#1463번 1로 만들기 (C++)  (0) 2020.05.20
#1149번 RGB거리 (C++)  (0) 2020.04.29
#9461번 파도반 수열 (C++)  (0) 2020.04.28
#1904번 01타일 (C++)  (0) 2020.04.23