반응형
https://www.acmicpc.net/problem/19947
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 512 MB | 871 | 304 | 254 | 41.503% |
문제
2020년에 학교로 복학한 주형이는 월세를 마련하기 위해서 군 적금을 깨고 복리 투자를 하려고 한다.
주형이가 하려는 투자에는 3가지 방법의 투자 방식이 있다.
- 1년마다 5%의 이율을 얻는 투자 (A)
- 3년마다 20%의 이율을 얻는 투자 (B)
- 5년마다 35%의 이율을 얻는 투자 (C)
투자를 할 때에는 다음과 같은 주의점이 있다.
- 투자의 기한(1년, 3년, 5년)을 채우는 시점에 이율이 반영되며, 그 사이에는 돈이 늘어나지 않는다.
- 투자 방식은 매년 바꿀 수 있다.
- 매번 이율은 소수점 이하를 버림 해서 받는다.
예를 들어서, 지금 가진 돈이 11111원이면, A 방식이면 1년 후에 555원, B 방식이면 3년 후에 2,222원, C 방식이면 5년 후에 3,888원을 이자로 받을 수 있다. 만약 C 방식으로 투자했지만 4년이 지난 시점이라면 받을 수 있는 이자는 0원이다.
주형이의 초기 비용이 H원일 때, Y년이 지난 시점에 가장 많은 금액을 얻을 수 있는 투자 패턴을 분석하고 그 금액을 출력하자.
입력
첫째 줄에 초기 비용 H와 투자 기간 Y가 주어진다.
모든 입력은 정수로 주어진다.
출력
가장 많은 이득을 얻었을 때의 총 자산을 소수점을 모두 버리고 정수로 출력한다.
제한
- 10,000 ≤ H ≤ 100,000, H는 정수
- 0 ≤ Y ≤ 10, Y는 정수
예제 입력 1
95229 3
예제 출력 1
114274
예제 입력 2
25542 10
예제 출력 2
46549
코드
/*
투자의 귀재 배주형
DP
1년보다는 3년, 3년보다는 5년짜리 투자가 무조건 좋으므로,
또 언제 투자방법을 바꾸는 것이 좋을지 모르므로 계속해서 비교해야 한다.
처음 풀이는 i % 3 == 0, i % 5 == 0 이라는 조건으로 접근해서 틀렸었다.
*/
import java.io.*;
import java.util.*;
public class p19947 {
static int h, y;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
h = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
long[] dp = new long[y + 1];
// 원금 셋팅
dp[0] = h;
for (int i = 1; i <= y; i++) {
// i = 1 : 1년이 지난 뒤 의 시점
dp[i] = (int) (dp[i - 1] * 1.05);
if (i >= 3) {
dp[i] = (int) Math.max((dp[i - 3] * 1.2), dp[i]);
}
if (i >= 5) {
dp[i] = (int) Math.max((dp[i - 5] * 1.35), dp[i]);
}
}
System.out.println(dp[y]);
}
}
반응형
'알고리즘 > [ Baekjoon ]' 카테고리의 다른 글
[ BOJ ][JAVA][3184] 양 (0) | 2021.05.20 |
---|---|
[ BOJ ][JAVA][1926] 그림 (0) | 2021.05.20 |
[ BOJ ][JAVA][4097] 수익 (0) | 2021.05.19 |
[ BOJ ][JAVA][21318] 피아노 체조 (0) | 2021.05.15 |
[ BOJ ][JAVA][21317] 징검다리 건너기 (0) | 2021.05.15 |