Algorithms

[정올]동전 자판기

Ohjeonghak 2014. 9. 1. 02:42
반응형
문제코드 : 1183  

동전 자판기(下)
Time Limit : 1000MS

문제
철수는 동전 자판기를 자주 이용한다. 그래서 그는 항상 상당히 많은 개수의 동전들을 주머니에 가지고 다니는데, 동전들이 주머니에서 짤랑거리는 것을 듣기 싫어한다. 그래서 철수는 동전자판기에서 무언가 살 때는 되도록 많은 개수의 동전을 사용한다. 철수의 주위에 있는 자판기들은 아주 구형인 모델이어서 지폐를 사용할 수 없고, 또, 정확한 액수만을 넣어야 한다.

이 문제는 철수가 가지고 있는 동전 중 최대 개수의 동전을 이용하여 자판기의 물건을 구입하는 방법을 출력하는 프로그램을 작성하는 것이다.

입력형식
첫줄에는 자판기에서 구입하려는 물건의 값 W가 주어진다. 둘째줄에는 6개의 정수가 주어진다. 각각의 정수는 철수가 가지고 있는 500원짜리, 100원짜리, 50원짜리, 10원짜리, 5원짜리, 1원짜리 동전들의 개수를 순서대로 나타낸다. 각각의 동전 개수는 1 이상 10이하이다. 정수들 사이에는 빈칸이 하나 있다.

출력형식
첫 줄에는 물건의 구입에 사용될 수 있는 최대 개수의 동전수를 출력한다. 둘째줄에는 최대 개수를 구성하는 동전들에 대해 500원짜리부터 시작해여 각각의 개수를 순서대로 출력한다.즉 6개의 정수가 출력되어야 하며 사용하지 않는 액수의 동전이 있으면 그 액수에 대해서는0을 출력한다.

※ 어떠한 동전들의 조합으로도 정확한 물건값이 될 수 없는 경우는 입력으로 주어지지 않는다.

입력 예
13
4 5 2 6 3 4

출력 예
5
0 0 0 0 2 3



#include<stdio.h>

int main()
{
	int w = 0, rw = 0;
	int result = 0;
	int flag = 0;

	int coinN[6] = { 0, };
	int coinRN[6] = { 0, };
	int coin[6] = { 500, 100, 50, 10, 5, 1 };

	int n = 0;
	int i = 0;

	scanf("%d", &w);
	scanf("%d %d %d %d %d %d", &coinN[0], &coinN[1], &coinN[2], &coinN[3], &coinN[4], &coinN[5]);

	for (i = 0; i<6; i++)
	{
		coinRN[i] = w ⁄ coin[i];
		if (coinRN[i] > coinN[i])
			coinRN[i] = coinN[i];
	}

	for (i = 5; i >= 0; i--)
	{
		if (flag == 1)
			coinRN[i] = 0;
		else
		{
			rw += coinRN[i] * coin[i];

			if (w <= rw)
				flag = 1;
		}
	}

	for (i = 0; i < 6; i++)
	{
		if (coinRN[i] != 0 && i != 5)
		{
			if (((coin[i + 1] * coinRN[i + 1]) ⁄ coin[i]) > 0)
				coinRN[i] -= ((coin[i + 1] * coinRN[i + 1]) ⁄ coin[i]);
		}
	}

	rw = 0;

	for (i = 0; i < 6; i++)
	{
		if (coinRN[i] != 0)
		{
			if (i != 5)
			{
				if ((w ⁄ coin[i]) < coinRN[i])
					coinRN[i] = w ⁄ coin[i];
			}
			else
				coinRN[i] = w - rw;

			rw += (coinRN[i]*coin[i]);
		}

		n += coinRN[i];

		if (rw == w)
			break;
	}
	
	printf("%d\n", n);
	for (i = 0; i < 6; i++)
	{
		printf("%d ", coinRN[i]);
	}
	printf("\n");

	return 0;
}

반응형

'Algorithms' 카테고리의 다른 글

인수분해(insubunE)  (0) 2014.09.04
최대 공약수(GCD), 최소 공배수(LCM)  (0) 2014.09.03
[정올]저글링 방사능 오염  (0) 2014.09.01
[정올] - [1067]종이자르기  (0) 2013.08.15
[리스트: LIST] - 노드(Node)  (0) 2013.08.04