개인공부용123 프로그래밍 블로그

AlgoSpot) LOAN 본문

알고리즘문제

AlgoSpot) LOAN

개인공부용123 2017. 2. 7. 21:36

문제 : https://algospot.com/judge/problem/read/LOAN


갚을 금액 N, 연이율 P, M개월동안 C원을 갚는다했을경우 한달에 최소 얼마를 갚아야하는지 구하는 문제입니다.


이문제는 이분법으로 접근해서 풀었습니다. (식으로도 풀수있습니다.)


*이분법으로 접근했을경우 setprecision(10)을 사용하지 않을경우 오차가 10^-7을 넘기때문에 오답처리가됩니다.



#include 
#include 

using namespace std;

double N, P; // 갚을 금액, 이자율
int M; //몇달동안

bool if_possible(double Monthly_payment) {
	double Money = N;
	const double interest = P / 1200.0;

	for (int i = 1; i <= M; ++i) {
		Money *= (1.0 + interest);
		Money -= Monthly_payment;
	}

	return (Money <= 0.0);
}

void BinaryMethod() {
	double lo = 0, hi = N * (1.0 + (P / 1200.0));

	for (int i = 0; i < 100; ++i) {
		double mid = (lo + hi) / 2.0;

		if (if_possible(mid)) hi = mid;
		else lo = mid;
	}

	cout << fixed << setprecision(10);
	cout << hi << endl;
}

int main() {
	ios::sync_with_stdio(false);
	int C;
	cin >> C;

	while (C--) {
		cin >> N >> M >> P;
		BinaryMethod();
	}

	return 0;
}

'알고리즘문제' 카테고리의 다른 글

AlgoSpot) POTION  (0) 2017.02.20
AlgoSpot) RATIO  (0) 2017.02.13
AlgoSpot) CANADATRIP  (0) 2017.02.06
AlgoSpot) ARCTIC  (0) 2017.02.03
AlgoSpot) DARPA  (0) 2017.01.31