알고리즘/BOJ

백준 2579번 계단 오르기

꾸준함. 2018. 2. 2. 20:07

문제 링크입니다: https://www.acmicpc.net/problem/2579

에서 익힌대로 재귀함수를 이용하여 풀고 싶었지만 아직 부족해서 그런지 재귀함수를 사용하지 못했습니다.


/*

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다

계단 오르는 데는 다음과 같은 규칙이 있다.

1.계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. , 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.

2.연속된 세 개의 계단을 모두 밟아서는 안된다. , 시작점은 계단에 포함되지 않는다.

3.마지막 도착 계단은 반드시 밟아야 한다.

 

도착 후 최대값을 반환하는 프로그램을 작성하시오

*/

#include <iostream>

#include <algorithm>

using namespace std;

 

int cache[300];

int stair[300]; //계단 최대 300

int stairCnt; //계단 갯수

 

//이 문제는 재귀로 작성하지 못했습니다...

int maxSum(void)

{

        cache[0] = stair[0];

        cache[1] = stair[0] + stair[1]; //계단에 쓰여있는 점수는 자연수이므로 stair[1]보다 stair[0]+stair[1]이 무조건 크다

        cache[2] = max(stair[0] + stair[2], stair[1] + stair[2]); //1+2 vs 2+1

 

        for (int i = 3; i < stairCnt; i++)

               cache[i] = max(cache[i - 2] + stair[i], stair[i - 1] + stair[i] + cache[i - 3]); //2칸을 올라갈 경우 vs 1칸씩 두번 올라갈 경우(연속해서 3칸을 올라가면 안되므로 cache[i-3] 추가)

        return cache[stairCnt - 1];

}

 

int main(void)

{

        cin >> stairCnt;

 

        for (int i = 0; i < stairCnt; i++)

               cin >> stair[i];

        cout << maxSum() << endl;

        return 0;

}



개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1005번 ACM Craft  (0) 2018.02.03
백준 1463번 1로 만들기  (0) 2018.02.02
백준 1932번 숫자삼각형  (2) 2018.02.02
백준 1149번 RGB거리  (0) 2018.02.01
백준 1003번 피보나치 함수(DP 사용)  (0) 2018.02.01