문제 풀이/Baekjoon Online Judge

[Baekjoon Online Judge] 19947번: 투자의 귀재 배주형

hyeonic 2021. 3. 29. 16:19
 

19947번: 투자의 귀재 배주형

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

www.acmicpc.net

요구사항

2020년에 학교로 복학한 주형이는 월세를 마련하기 위해서 군 적금을 깨고 복리 투자를 하려고 한다.

주형이가 하려는 투자에는 3가지 방법의 투자 방식이 있다. 

 

 - 1년마다 5%의 이율을 얻는 투자 (A)

 - 3년마다 20%의 이율을 얻는 투자 (B)

 - 5년마다 35%의 이율을 얻는 투자 (C)

 

투자를 할 때에는 다음과 같은 주의점이 있다.

 

 - 투자의 기한(1년, 3년, 5년)을 채우는 시점에 이율이 반영되며, 그 사이에는 돈이 늘어나지 않는다.

 - 투자 방식은 매년 바꿀 수 있다.

 - 매번 이율은 소수점 이하를 버림 해서 받는다.

 

주형이의 초기 비용이 H원일 때, Y년이 지난 시점에 가장 많은 금액을 얻을 수 있는 투자 패턴을 분석하고 그 금액을 출력한다.

입력

가장 많은 이득을 얻었을 때의 총 자산을 소수점을 모두 버리고 정수로 출력한다.

출력

 - 10,000 ≤ H ≤ 100,000, H는 정수

 - 0 ≤ Y ≤ 10, Y는 정수


동적프로그래밍과 브루트포스 알고리즘을 적절히 조합한 문제이다. 각각의 년차일 때 가장 큰 이득인 총 자산을 구하고 그것을 dp 배열에 저장해간다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Baekjoon19947 {

    public static void main(String[] args) throws IOException {

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        String[] input = bufferedReader.readLine().split(" ");
        int h = Integer.parseInt(input[0]); // 초기 비용
        int y = Integer.parseInt(input[1]); // 투자 기간
        int[] dp = new int[y + 1];

        dp[0] = h; // 초기 비용 0년차

        for (int i = 1; i <= y; i++) {
            dp[i] = (int) (dp[i - 1] * 1.05);
            if (i >= 3) dp[i] = (int) Math.max(dp[i], dp[i - 3] * 1.2);
            if (i >= 5) dp[i] = (int) Math.max(dp[i], dp[i - 5] * 1.35);
        }

        System.out.println(dp[y]);

        bufferedReader.close();
    }
}