티스토리 뷰

알고리즘(C++)/백준 알고리즘

2839번 : 설탕 배달

개발하는꼬물이 2017. 11. 17. 16:05

1. 문제 요약

   설탕공장에서 만드는 설탕은 봉지에 담겨져 있고, 설탕 봉지는 5킬로그램 짜리와 3킬로그램짜리가 있다. 

   상근이는 설탕 배달을 갈 때, 최대한 적은 봉지를 들고가려고 한다. 예를 들어 18킬로그램 설탕을 배달해야 할 때, 

   3킬로그램 봉지 6개를 가져가도 되지만,  5킬로그램 3개와 3킬로그램 1개로 가져가는 것이 더 적은 개수의 봉지로 

   배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 

   프로그램을 작성하시오. (단, 3 <= N <= 5000)


2. 예제 입력

18


3. 예제 출력

4


4. 코드

#include <iostream>
using namespace std;

int main()
{
	int n, big, small;
	int remainder;

	cin >> n;

	if (n < 3 || n > 5000)
		return 0;

	big = n / 5;  // 먼저 5 킬로그램으로 나눔

	while (big >= 0)  // 5 킬로그램짜리를 1개씩 감소시키면서 반복
	{
		remainder = n - (5 * big);
		
		if (remainder % 3 == 0)
		{
			cout << big + (remainder / 3) << endl;
			return 0;
		}

		big--;
	}

	if (big < 0)  // 반복문이 끝날 때 까지 출력이 없으면 나누어 떨어지지 않는 수 이므로 -1 출력
	{
		cout << "-1" << endl;
	}
	
	return 0;
}


'알고리즘(C++) > 백준 알고리즘' 카테고리의 다른 글

2742번 : 기찍 N  (0) 2017.11.17
2741번 : N 찍기  (0) 2017.11.17
2558번 : A + B -2  (0) 2017.11.15
10430번 : 나머지  (0) 2017.11.15
10869번 : 사칙연산  (0) 2017.11.15
댓글