import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[] dp ;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int H = Integer.parseInt(st.nextToken());
int Y = Integer.parseInt(st.nextToken());
dp = new int[Y + 1];
dp[0] = H;
for(int i = 1; i <= Y ; i++) {
dp[i] = (int)(dp[ i - 1] * 1.05);
if( i >= 3) {
dp[i] = Math.max((int)(dp[i - 3] * 1.2), dp[i]);
}
if(i >= 5) {
dp[i] = Math.max((int)(dp[i - 5] * 1.35), dp[i]);
}
}
System.out.println(dp[Y]);
}
}
○ 문제 요약
주형이가 Y년이 지난 시점에 가장 많은 금액을 얻을 수 있는 투자 패턴을 분석하고 그 금액을 출력해라.
○ 문제 풀이
투자 기간이 3년 미만이면 1년마다 5%의 이율을 얻는 A 투자법밖에 없기 때문에 3년 이상인 경우를 예를 들어 설명하겠다.
투자 기간이 3년이라면 아래와 같이 선택지가 2개가 있다.
초기 투자 비용이 100이고 1번 선택지를 사용한다면 3년 뒤에 115 라는 결과가 나오고 2번 선택지를 사용하다면 3년 뒤에 120라는 결과가 나오는 것을 통해 이율이 높은 투자를 하는 것이 더 많은 금액을 받는 것을 알 수 있다.
그렇다면 우리는 투자 기간이 3년 혹은 5년이 넘어가면 더 높은 이율을 주는 방법을 선택해야한다. 예제 입력 1을 예로 실제 코드가 수행되는 과정을 보도록 하자.
초기 금액이 95229이고 투자 기간은 3년이다.
i = 1
for(int i = 1 ; i <= Y ; i++){
dp[1] = dp[0] * 1.05; >> dp[1] = 99,990
}
i = 2
for(int i = 2; i <= Y ; i++){
dp[2] = dp[1] * 1.05; >> dp[2] = 104,989
}
i = 3
for(int i = 3 ; i <= Y ; i++){
dp[3] = dp[2] * 1.05; >> dp[3] = 110,238
if( i >= 3){
dp[3] = Math.max((dp[0] * 1.2), dp[3]); >> dp[3] = Math.max(114,274, 110,238); >> dp[3] = 114,274;
}
}
System.out.println(114,274);
위와 같이 수행 과정을 통해 우리가 구해야하는 값을 올바르게 출력했다. 투자 기간이 예제 입력 1에서 입력받은 3보다 큰 투자 기간을 입력받아도 위 코드를 실행하면 올바른 값을 출력할 수 있을 것이다.
○ 결과
'문제풀이 > 백준' 카테고리의 다른 글
백준 2606. 바이러스 (JAVA) (0) | 2022.04.05 |
---|---|
백준 1932. 정수 삼각형 (JAVA) (0) | 2022.04.04 |
백준 11047. 동전 0 (JAVA) (0) | 2022.04.01 |
백준 15649. N과 M(1)(JAVA) (0) | 2022.03.30 |
백준 9461. 파도반 수열(JAVA) (2) | 2022.03.29 |