알고리즘/BOJ

백준 2839번 설탕 배달

꾸준함. 2018. 3. 31. 01:35

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

간단한 수학문제인줄 알고 풀었는데 알고보니 동적계획법 문제였습니다.

동적계획법을 이용하지 않을 경우 시간초과가 발생하므로 메모이제이션을 하는 것이 핵심이였습니다.


#include <iostream>

#include <cstring> //memset

#include <algorithm>

using namespace std;

 

const int INF = 987654321;

const int MAX = 5000;

 

int cache[MAX + 1];

 

int leastBag(int N)

{

        //기저 사례

        if (N == 0) //정확한 양일 경우

               return 0;

        if (N < 0) //배달할 수 없는 경우

               return INF;

        int &result = cache[N];

        if (result != -1)

               return result;

 

        result = 0;

        result = 1 + min(leastBag(N - 3), leastBag(N - 5));

        return result;

}

 

int main(void)

{

        int N;

        cin >> N;

 

        memset(cache, -1, sizeof(cache));

 

        int result = leastBag(N);

        if (result >= INF) //INF에서 더해지므로

               cout << -1 << endl;

        else

               cout << result << endl;

        return 0;

}


개발환경:Visual Studio 2017


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

반응형

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

백준 2629번 양팔저울  (3) 2018.04.08
백준 1978번 소수 찾기  (0) 2018.04.03
백준 1110번 더하기 사이클  (0) 2018.03.31
백준 2352번 반도체 설계  (0) 2018.03.29
백준 5582번 공통 부분 문자열  (1) 2018.03.25