4816 : 전자레인지

3개의 시간조절용 버튼 A B C 가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A , B , C 에 지정된 시간은 각각 5 분, 1 분, 10 초이다. 냉동음식마다 전자레인지로 요리해야할 시간 T 가 초단위로 표시되어 있다. 우리는 A , B , C 3 개의 버튼을 적절히 눌러서 그 시간의 합이 정확히 T 초가 되도록 해야 한다. 단 버튼 A , B , C 를 누른 횟수의 합은 항상 최소가 되어야 한다. 이것을 최소버튼 조작이라고 한다. 만일 요리시간이 100초라고 하면( T = 100 ) B 를 1 번, C 는 4 번 누르면 된다. 이와 다르게 C 를 10 번 눌러도 100 초가 되지만 이 경우 10 번은 최소 횟수가 아니기 때문이 답이 될 수 없다. 이 경우 B 1 번, C 4 번, 총 5 번이 최소버튼 조작이다. 그 리고 T = 234 와 같이 3 개의 버튼으로 시간을 정 확히 맞출 수 없는 경우도 있다. 여러분은 주어진 요리시간 T 초를 맞추기 위한 최 소버튼 조작 방법을 구하는 프로그램을 작성해야 한다

  • input: 첫 번째 줄에는 요리시간 T (초)가 정수로 주어져 있으며 그 범위는 1 ≤ T ≤ 10 , 000 이다.

  • output: 여러분은 T 초 를 위한 최소버튼 조작의 A B C 횟수를 첫 줄에 차례대로 출력해야 한다. 각각의 횟수 사이에는 빈 칸을 둔다. 해당 버튼을 누르지 않는 경우에는 숫자 0 을 출력해야한다. 만일 제시된 3 개의 버튼 으로 T 초를 맞출 수 없으면 음수 – 1 을 첫 줄에 출력해야 한다.

Solve 1)

#include <iostream>
using namespace std;

int main()
{
    int t;
    cin >> t;
    if(t%10==0)
        cout<<t/300<<" "<<t%300/60<<" "<<t%300%60/10;
    else
        cout<<-1;
}

간단한 구현문제이다. 하지만 위와 같이 단순하게 풀수도 있고, 아니면
Simple implementation problem. You can just solve this like above or

#include <iostream>
using namespace std;

int main()
{
    int A=300, B=60, C=10, t, press1 =0, press2=0, press3=0;
    cin >> t;
    while (t>=0)
    {
        if (t-A>=0)
        {
            press1 += 1;
            t -= A;
        }
        else
        {
            break;
        }
    }
    while (t>=0)
    {
        if (t-B>=0)
        {
            press2 += 1;
            t -= B;
        }
        else
        {
            break;
        }
    }
    while (t>=0)
    {
        if (t-C>=0)
        {
            press3 += 1;
            t -= C;
        }
        else
        {
            break;
        }
    }

    if (t==0)
    {
        cout << press1 << " " << press2 << " " << press3;
    }
    else
    {
        cout << -1;
    }
}

써지는 대로 쉽게 풀수도 있다.
첫번째 방법이 더욱 효율적인 풀이이다.

https://codeup.kr/problem.php?id=4816