문제
초기 금액, 연이율, 목표 금액이 주어질 때 복리로 목표에 도달하는 최소 연수를 구하라.
입력
초기 금액 n, 연이율 b%, 목표 금액 m이 여러 줄로 주어진다 (EOF까지).
출력
각 케이스마다 최소 연수를 출력한다.
예제
| 입력 | 출력 |
|---|---|
100 5 200 | 15 |
풀이
로그를 이용하여 복리 연수를 계산한다.
n * (1 + b/100)^t >= m을 만족하는 최소 t를 구한다t = ceil(log(m/n) / log(1 + b/100))로 올림 계산한다- 결과를 출력한다
핵심 아이디어: 복리 공식을 로그로 풀면 반복 없이 O(1)에 연수를 구할 수 있다.
코드
#include <iostream>
#include <cmath>
using namespace std;
double n, b, m;
int main()
{
while (cin >> n >> b >> m)
{
cout << ceil(log(m / n) / log(1 + b / 100)) << "\n";
}
return 0;
}복잡도
- 시간: O(T)
- 공간: O(1)