본문 바로가기

백준/실버

[백준 19947번] 투자의 귀재 배추형 (C++)

문제링크 : https://www.acmicpc.net/problem/19947

 

19947번: 투자의 귀재 배주형

2020년에 학교로 복학한 주형이는 월세를 마련하기 위해서 군 적금을 깨고 복리 투자를 하려고 한다. 주형이가 하려는 투자에는 3가지 방법의 투자 방식이 있다.  1년마다 5%의 이율을 얻는 투자 (

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

int H, Y;
int dp[11];

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);
    
    cin >> H >> Y;

    dp[0]=H; //초기비용
    for(int i=1; i<=Y; i++)
    {
        dp[i] = dp[i-1]*1.05; //1년마다 5%의 이율
        if(i>=3) dp[i] = max(dp[i], int(dp[i-3]*1.2)); //3년마다 20%의 이율
        if(i>=5) dp[i] = max(dp[i], int(dp[i-5]*1.35)); //5년마다 35%의 이율
    }

    cout << dp[Y];
    return 0;
}

 

초기비용이 H라고 문제에 적혀있기 때문에 금액을 담을 dp 배열에 첫번째 값을 우선 H로 초기화해준다.

이후 조건에 맞게 1~Y까지 반복문을 돌며 값을 갱신하게 된다.

 

기본적으로 1년마다 5%의 이율을 가지기 때문에 직전값 * 1.05를 하여 dp를 갱신시켜준다.

3년 또는 5년 차에는 이율이 달라지는데 각각 20%와 35%이다.

따라서 1년마다 5%의 이율을 더한 것과, 3년 시에 20% 이율, 5년 시에 35% 이율을 더 했을 시 어떤 값이 더 큰 지를 체크해준다.

 

해당 문제에서 주의해랴 할점은 max 연산 시 3년차 및 5년차 이율 계산할 때 소숫점을 곱해 double 연산이 된다는 것이다.

기존 dp[i]는 int 값이기 때문에 후자 또한 int로 형변환을 해주어야 무사히 max로 값 비교가 가능하다.