(JAVA) 백준온라인 16194번 - 카드 구매하기 2

2023. 9. 12. 16:56백준온라인

저번 문제와는 반대로 최소 비용을 구하는 문제이다!!

여기서는 최솟값 초기화를 해줘야한다 왜냐하면 배열을 처음 선언할 때는 0으로 초기화가 되기 때문이다!

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] p = new int[n + 1];
        int[] dp = new int[n + 1];

        for (int i = 1; i <= n; i++) {
            int num = sc.nextInt();
            p[i] = num;
        }

        for (int i = 1; i <= n; i++) {
            dp[i] = p[i]; //최솟값 초기화!! 꼭 해줘야함. 이전 문제에서는 최댓값을 구하는거라 어차피 dp배열 초깃값인 0이랑 다른
                          //배열 이랑 비교하면 당연히 다른 배열이 커서 초기화 안해도 되는데 이 문제는 최솟값 구하는거라 해줘야함
            for (int j = 1; j <= i; j++) {
                dp[i] = Math.min(dp[i], p[j] + dp[i - j]);
            }
        }
        System.out.println(dp[n]);


    }


}

꾸준히 하자..