매개변수 P(원금), O, E, T가 주어졌다고 가정해 보겠습니다. P달러의 원금을 주식 시장에 투자하려고 하는데, 이 주식 시장은 매년 수익률이 번갈아 나타납니다. 즉, 첫 해에는 E%의 수익률을, 다음 해에는 O%의 수익률을 기록하는 식입니다. 우리가 구해야 할 값은 원금이 최소 T달러에 도달하는 데 몇 년이 걸리는지입니다.
문제 이해하기
예를 들어 입력이 P = 200, O = 10, E = 25, T = 300이라면 결과는 3이 됩니다. 과정을 하나씩 살펴보면 다음과 같습니다.
- 1년 차: 25%의 수익 발생 → 200 + 50 = 250달러
- 2년 차: 10%의 수익 발생 → 250 + 25 = 275달러
- 3년 차: 10%의 수익 발생 → 275 + 27.5 = 302.5달러
302.5달러는 목표액인 300달러를 초과하므로, 총 3년이 필요합니다.
해결 알고리즘
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- 결과값 ans를 0으로 초기화합니다.
- P가 T 미만인 동안 아래 과정을 반복합니다.
- P에 (1 + E/100)를 곱하고 ans를 1 증가시킵니다.
- 그래도 P가 여전히 T 미만이라면, P에 (1 + O/100)를 곱하고 ans를 한 번 더 증가시킵니다.
- 반복이 끝나면 ans를 반환합니다.
파이썬 구현 코드
class Solution: def solve(self, P, O, E, T): ans = 0 while P < T: P *= 1+(E/100) ans += 1 if P < T: P *= 1+(O/100) ans += 1 return ans ob = Solution() P = 200 O = 10 E = 25 T = 300 print(ob.solve(P, O, E, T))
입력
P = 200, O = 10, E = 25, T = 300
출력
3
코드 설명
while 루프 안에서는 먼저 E%의 수익률을 적용한 뒤, 그 시점에도 목표 금액에 도달하지 못했다면 O%의 수익률을 추가로 적용하는 방식으로 동작합니다. 수익률을 한 번 적용할 때마다 연수를 세는 변수 ans가 1씩 증가하며, 원금이 목표액 이상이 되는 순간 반복문이 종료되고 총 소요 연수가 반환됩니다. 이처럼 간단한 시뮬레이션 반복문만으로 복리 수익이 누적되는 상황에서 목표 달성 시점을 손쉽게 계산할 수 있습니다.