© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 4998 - 저금

2024-12-30
BOJ
브론즈 II
cpp
원본 문제 보기
수학
시뮬레이션

문제

BOJ 4998 - 저금

초기 금액, 연이율, 목표 금액이 주어질 때 복리로 목표에 도달하는 최소 연수를 구하라.

입력

초기 금액 n, 연이율 b%, 목표 금액 m이 여러 줄로 주어진다 (EOF까지).

출력

각 케이스마다 최소 연수를 출력한다.

예제

입력출력
100 5 20015

풀이

로그를 이용하여 복리 연수를 계산한다.

  1. n * (1 + b/100)^t >= m을 만족하는 최소 t를 구한다
  2. t = ceil(log(m/n) / log(1 + b/100))로 올림 계산한다
  3. 결과를 출력한다

핵심 아이디어: 복리 공식을 로그로 풀면 반복 없이 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)