algospot : https://algospot.com/judge/problem/read/LOAN
algospot LOAN 문제입니다.
이분법을 이용하였으며, 초기 이분법 값을 잡아주는 방법과 대출 잔금을 계산하는 방법을 알고 계신다면
해결할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
/*
집을 떠나 혼자 살게 된 재훈이는 회사 근처의 전세집을 알아보고 있습니다.
전세금은 N원인데, 재훈이는 이것을 연이율 P%로 대출받을 수 있습니다.
재훈이는 M개월 동안 매달 일정액 C원씩을 갚으려고 합니다.
대출의 잔금은 대출 기간 동안 다음과 같이 변화합니다.
ᆞ대출의 잔금은 대출 금액 N원에서 시작합니다.
ᆞ한 달이 지날 때마다 대출 잔금이 월 이자 (P/12)% 만큼 불어납니다.
ᆞ이자가 추가된 다음 월 상환액 C를 대출 잔금에서 제합니다.
M개월 걸려 모든 대출 금액을 갚기 위해서는 한 달에 최소 얼마씩을 갚아야 할까요?
*/
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// 매달 C원씩 갚았을 때 남게 되는 대출 잔금을 반환합니다.
double balance(double money, int month, double rates, double C) {
for (int i = 0; i < month; i++) {
money *= (1 + (rates / 12 / 100));
money -= C;
}
return money;
}
// 한달에 갚아야 하는 최소 금액을 반환합니다
double payment(double money, int month, double rates) {
double lo = 0;
double hi = money * (1 + (rates / 12 / 100));
for (int i = 0; i < 100; i++) {
double mid = (lo + hi) / 2;
if (balance(money, month, rates, mid) <= 0) {
hi = mid;
}
else {
lo = mid;
}
}
return hi;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
/*
입력의 첫 줄에는 테스트 케이스의 수 T(<= 50)가 주어집니다.
각 테스트 케이스는 3개의 수 N, M, P(1 <= N <= 100,000,000, 1 <= M <= 120, 0 < P <= 50)으로 주어집니다.
N과 P는 실수이며, M은 정수입니다.
*/
int T; cin >> T;
while (T--) {
// N : 대출금액
// M : M개월
// P : 연이율
double N, P;
int M;
cin >> N >> M >> P;
/*
각 테스트 케이스마다 한 줄에 한 달마다 상환할 금액 C를 출력합니다.
10-7 이하의 절대/상대 오차가 있는 답은 정답으로 인정됩니다.
*/
cout << fixed;
cout.precision(10);
cout << payment(N, M, P) << endl;
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
'algorithm > algospot' 카테고리의 다른 글
algospot PASS486 (0) | 2020.02.27 |
---|---|
algospot FOSSIL (0) | 2020.02.26 |
algospot RATIO (0) | 2020.02.25 |
algospot ROOTS (0) | 2020.02.24 |
algospot FESTIVAL (0) | 2019.10.27 |