<CodingStudy>백준 10162:보물

ParkSHAUN ㅣ 2022. 7. 21. 19:34

728x90

문제
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초를 맞추기 위한 최소버튼 조작 방법을 구하는 프로그램을 작성해야 한다. 

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

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

 

예제 입력 1 
100
예제 출력 1 
0 1 4
예제 입력 2 
189
예제 출력 2 
-1

 

출력1
출력2

 

 

//백준 10162번 보물

#include <iostream>

using namespace std;
int n;//입력받을 요리시간 
int t[] = {300,60,10};// 5분 1분 10초 를 초단위로 배열
int result[] ={0,0,0};//abc번을 각각 몇번눌러줘야할지 계산
int i = 0;//증감
int main()
{
   
	cin >> n;//요리시간을 입력받고 
	if (n % 10 == 0)// n 이 10으로 나눴을때 나머지가 0이면 코드실행 아니면 -1이 나온다 
	{
		while (n > 0)//0이면 바로 while문 종료 
		{

			if (n - t[i] >= 0)//n에서 배열값을 뺏을때 0보다크면 진행 아니라면 다음 배열 가져오기위해 증감 
			{
				n = n - t[i];
				result[i] = result[i] + 1;//result i번째 증감 
			}
			else
			{
				i++;
			}
		}
		for (int i = 0; i < 3; i++)//답이 3개가 나와야하기때문에 for문 돌려서 cout
		{
			cout << result[i] << " ";
		}
	}
	else

	{
		cout << "-1";
	}

}
반응형

'CodingStudy' 카테고리의 다른 글

<Codingstudy>백준 11047번:동전 0  (0) 2022.07.21
<CodingStudy> 백준 2839번 : 설탕배달  (0) 2022.07.21
<CodingStudy>백준 5585번:거스름돈  (0) 2022.07.20
<CodingStudy>백준 11399번:ATM  (0) 2022.07.19
<CodingStudy>Greedy3  (0) 2022.07.19