문제 개요
숫자 X가 주어졌을 때, 은행에 예치한 100루피가 연 1%의 복리(매년 이자가 원금에 다시 합산됨)로 불어난다고 가정해 봅시다. 이때 총액이 X루피에 도달하기까지 몇 년이 걸리는지 구하는 것이 목표입니다. 단, 금액은 정수 단위로만 계산합니다.
예를 들어 입력값이 X = 520이라면, 출력 결과는 213이 됩니다.
해결 접근 방법
이 문제는 시뮬레이션 방식으로 간단히 해결할 수 있습니다. 잔액이 목표 금액 n에 도달할 때까지 매년 이자를 계산하여 원금에 더하는 과정을 반복하면서, 반복 횟수 즉, 경과 연수를 세면 됩니다.
구체적인 알고리즘은 다음과 같습니다.
sum := 0 // 경과 연수 balance := 100 // 초기 잔액 while balance < n, do: interest := balance / 100 // 연 1% 이자 계산 sum := sum + 1 // 1년 경과 balance := balance + interest // 이자를 잔액에 합산 return sum
C++ 구현 예제
아래 코드는 위 알고리즘을 C++로 구현한 것입니다.
#include <bits/stdc++.h>
using namespace std;
int solve(int n){
int sum = 0;
int balance = 100;
while (balance < n){
int interest = balance / 100;
sum = sum + 1;
balance = balance + interest;
}
return sum;
}
int main(){
int X = 520;
cout << solve(X) << endl;
}입력
520
출력
213
코드 설명
solve() 함수는 초기 잔액 100루피에서 시작하여, 잔액이 목표 금액 n 미만인 동안 루프를 반복합니다. 매 반복마다 현재 잔액의 1%에 해당하는 이자(balance / 100)를 계산하고, 이를 잔액에 더한 후 연수를 1씩 증가시킵니다.
정수 나눗셈을 사용하기 때문에 이자는 항상 내림 처리되며, 문제 조건인 '정수 단위 계산'을 자연스럽게 만족합니다. 520루피의 경우 약 213년이 걸린다는 결과가 나오는데, 이는 연 1%라는 낮은 이자율 때문에 자금이 두 배로 불리는 데만 해도 대략 70년가량 소요되기 때문입니다. 이는 복리 성장률을 추정하는 '72의 법칙(72 ÷ 이자율 ≈ 배상 기간)'과도 일치하는 결과입니다.