2839 - 설탕 배달

2839 문제 링크

접근법

설탕을 처음에 최대한 5킬로그램 봉지에 담고 남은 나머지를 3킬로그램 봉지에 담고 그래도 설탕이 남으면 5킬로그램 봉지에 담은걸 빼고 3킬로봉지에 담아본다. 그래도 설탕이 남으면 계속해서 5킬로그램 봉지에 있는걸 빼고 3킬로봉지에 담아보고 만약 5킬로그램 봉지가 하나도 없는데 3킬로그램 봉지로 담아지지 않는다면 그때는 -1 을 출력한다.

#include <iostream>

using namespace std;


int fiveCheck(int &suger , int &fivebags)
{
    fivebags += suger/5;
    suger = suger%5;
    return 0;
}

int threeCheck(int &suger, int &threebags)
{
    threebags += suger/3;
    suger = suger%3;
    return 0;
}

int allCheck(int &suger, int &fivebags, int &threebags)
{
    fiveCheck(suger,fivebags);
    threeCheck(suger,threebags);

    while(!(suger == 0))
    {
        if(fivebags == 0 && !(threebags == 0) && !(suger == 0))
        {   cout << "-1";
            return 0;
        }

        fivebags -= 1;
        suger += 5;
        threeCheck(suger, threebags);
    }

    cout << threebags + fivebags;
    return 0;
}

int main()
{
    int suger, fivebags=0, threebags=0;
    cin >> suger;
    allCheck(suger,fivebags,threebags);

    return 0;
}

결론

어떻게 해야 효율적으로 담을 수 있는 지 생각하게 되는 재밌는 문제였다고 생각한다.

업데이트: