관리 메뉴

Kim's Programming

1970. 쉬운 거스름돈 본문

SW ExpertAcademy/D2

1970. 쉬운 거스름돈

Programmer. 2018. 12. 1. 02:04

1970. 쉬운 거스름돈

문제출처: https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PsIl6AXIDFAUq&categoryId=AV5PsIl6AXIDFAUq&categoryType=CODE




풀이 방법


그리디 알고리즘에 따라 큰 화폐로 먼져 나눠  주고 그 다음 작은 화폐노 나눠주는것을 반복한다. 처음엔 막 썼지만 조금 더 깔끔하게 두 번쨰로 짜봤다.


<코드>


첫 번째

#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
	int test_case;
	int T;
	cin >> T;

	for (test_case = 1; test_case <= T; ++test_case)
	{
		unsigned int data{ 0 };
		std::cin >> data;
		
		int count50000{ 0 };
		int count10000{ 0 };
		int count5000{ 0 };
		int count1000{ 0 };
		int count500{ 0 };
		int count100{ 0 };
		int count50{ 0 };
		int count10{ 0 };

		count50000 = data / 50000;
		if (count50000 > 0) data -= count50000 * 50000;
		
		count10000 = data / 10000;
		if (count10000 > 0) data -= count10000 * 10000;

		count5000 = data / 5000;
		if (count5000 > 0) data -= count5000 * 5000;

		count1000 = data / 1000;
		if (count1000 > 0) data -= count1000 * 1000;

		count500 = data / 500;
		if (count1000 > 0) data -= count500 * 500;

		count100 = data / 100;
		if (count100 > 0) data -= count100 * 100;

		count50 = data / 50;
		if (count50 > 0) data -= count50 * 50;

		count10 = data / 10;
		if (count10 > 0) data -= count10 * 10;

		std::cout << "#" << test_case << "\n" << count50000 << " " << count10000 
			<< " " << count5000 << " " << count1000 << " " << count500 << " " << count100 << " " << count50 << " " << count10 << "\n";

	}

	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}


두 번째


#include <iostream>
#include <cstring>
using namespace std;

const int money[8]{ 50000,10000,5000,1000,500,100,50,10 };

int main(int argc, char** argv)
{
	std::ios::sync_with_stdio(false);
	std::cout.tie(nullptr);
	std::cin.tie(nullptr);
	
	int test_case, T;
	cin >> T;

	for (test_case = 1; test_case <= T; ++test_case)
	{
		int result[8];
		memset(result, 0, sizeof(result));

		int input;
		std::cin >> input;

		for (int i = 0; i < 8; i++)
		{
			if (input == 0) break;
			if (money[i] <= input)
			{
				result[i] = input / money[i];
				input = input % money[i];
			}

		}
	
		std::cout << "#" << test_case << "\n";
		for (int i = 0; i < 8; i++)
			std::cout << result[i] << " ";
		std::cout << "\n";
	}

	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}

'SW ExpertAcademy > D2' 카테고리의 다른 글

1976. 시각 덧셈  (0) 2018.12.01
1974. 스도쿠 검증  (0) 2018.12.01
1966. 숫자를 정렬하자  (0) 2018.12.01
1961. 숫자 배열 회전  (0) 2018.12.01
1959. 두 개의 숫자열  (0) 2018.12.01