-
반응형
문제
초기 대출금(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
잔액 -= 월 상환금
인 것을 알 수있다. 이자율에 구체적인 값을 넣고 오차범위 안에 드는 값을 구하면 리턴하는 함수를 만들면 답을 구할 수 있을 것이다. 이 때 이자율에 들어가는 값은 이분탐색을 통해 찾으면 속도를 줄일 수 있을 것이다.
코드
123456789101112131415161718192021222324252627282930public 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