티스토리 뷰

algorithm

이자율 계산하기

북항 2018. 8. 1. 15:34
donaricano-btn
반응형

문제


초기 대출금(price)과 매월 상환금(monthlyPayment), 상환기간(loanTerm)이 주어졌을 때 이자율을 계산하라. 단 상환기간은 월 단위로 주어지며 매월 이율은 연이율을 12로 나눈 것과 같다. 이자율은 1e-9 이하의 오차범위를 가져야 한다.



입출력 예시


입력 1)

price = 6800

monthlyPayment = 100

loanTerm = 68


출력 1)

0


입력 2)

price = 2000

monthlyPayment = 510

loanTerm = 4


출력 2)

9.562054624620941



풀이


이자율을 미지수로 두고 매번 남은 잔액에 대해 생각해 보면


잔액 *= 이자율/1200 + 1

잔액 -= 월 상환금


인 것을 알 수있다. 이자율에 구체적인 값을 넣고 오차범위 안에 드는 값을 구하면 리턴하는 함수를 만들면 답을 구할 수 있을 것이다. 이 때 이자율에 들어가는 값은 이분탐색을 통해 찾으면 속도를 줄일 수 있을 것이다.



코드


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
public double interestRate(double price, double monthlyPayment, int loanTerm) {
    
    double balance;
    double ret = 50;
    double top = 100;
    double low = 0;
    
    while(true) {
        
        balance = price;
        
        for (int i = 0; i< loanTerm; i++) {
            balance *= ret/1200 + 1;
            balance -= monthlyPayment;
        }
        
        if (balance < 1e-9 && balance > -(1e-9)) {
            break;
        } else if (balance > 0) {
            top = ret;
            ret -= (ret-low)/2;
        } else {
            low = ret;
            ret += (top-ret)/2;
        }
        
    }
    
    return ret;        
}
cs


반응형

'algorithm' 카테고리의 다른 글

N으로 표현  (1) 2019.02.28
최소 국경  (0) 2018.08.02
악수 문제(카달란 수)  (0) 2018.07.31
기부금 최대값 찾기  (0) 2018.07.30
배낭 문제(냅색 문제)  (0) 2018.07.29
donaricano-btn
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함