문제링크 : https://www.acmicpc.net/problem/19947
#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로 값 비교가 가능하다.
'백준 > 실버' 카테고리의 다른 글
[백준 14430번] 자원 캐기 (C++) (0) | 2024.01.11 |
---|---|
[백준 14606번] 피자 (Small) (C++) (0) | 2024.01.10 |
[백준 15312번] 이름 궁합 (C++) (0) | 2024.01.08 |
[백준 24447번] 알고리즘 수업 - 너비 우선 탐색 4 (C++) (0) | 2024.01.06 |
[백준 24483번] 알고리즘 수업 - 깊이 우선 탐색 4 (C++) (0) | 2024.01.05 |