minhui study

백준 14916번 거스름돈(Python, C++) 본문

백준 문제풀이/그리디 알고리즘

백준 14916번 거스름돈(Python, C++)

minhui 2020. 8. 20. 01:42

https://www.acmicpc.net/problem/14916

 

14916번: 거스름돈

첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다.

www.acmicpc.net

거스름돈을 못주는 경우는 5원보다 적고 2의 배수가 아닌 경우이므로 1원과 3원일때는 거슬러 줄 수 없다.

그리고 가장 최소의 갯수로 거슬러 주어야 하므로 큰 수인 5부터 나누지만 5로 나눈 나머지가 홀수인 경우에는 나머지에서 5원을 더해주어 5원 대신 나머지+5원을 2원으로 거슬러 주면 된다.

 

 

 

<python>

n = int(input())
o = n % 5
if(n==1 or n==3):
    result = -1;
elif(o%2==0):
    result=n//5+o//2
else:
    result=((n//5)-1)+((o+5)//2)
print(result)

 

 

<C++> 

#include<iostream>
using namespace std;

int main() {

	int n, result;
	cin >> n;
	int o = n % 5;
	if (n == 1 || n == 3) {
		result = -1;
	}
	else if (o % 2 == 0) {
		result = n / 5 + o / 2;
	}
	else {
		result = ((n / 5) - 1) + ((o + 5) / 2);
	}

	cout << result;
	return 0;
}
Comments