본문 바로가기

PROGRAMMING/ALGORITHM

[백준] 16194번 카드 구매하기 2 JAVA

 

https://dvpdvp.tistory.com/59?category=932820 

 

[백준] 11052번 카드 구매하기 JAVA

문제를 요약하면 n개의 카드를 제일 비싼 값을 주고 사고싶다는 미친 문제 1~n개가 들어있는 팩이 각각 가격이 다르다. 예를 들어 3개의 카드를 살 때 경우의 수 1. 1개팩 3개 2. 1개팩 1개 2개팩 1개

dvpdvp.tistory.com

이전 포스팅 11052번이랑 매우 유사한 문제

 

풀이 변경점은

1. MAX -> MIN값으로 변경

2. 초기화를 기본값인 0이 아니라 카트 팩의 가격으로 초기화해줄 것

 

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

public class Main {
    public static void main(String args[]) throws IOException {
    	BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    	int cnt = Integer.parseInt(reader.readLine());
    	String[] priceStringArr = reader.readLine().split(" ");
    	int[] priceArr = new int[cnt+1];
    	int[] lowestPriceArr = new int[cnt+1];
    	
//    	배열 정수형으로 초기화
//    	최솟값을 구하는데 0으로 초기화하면 무조건 출력값이 0이 되니까, 입력받은 카드값으로 초기화
    	for(int i=0; i<priceStringArr.length; i++) {
    		priceArr[i+1] = Integer.parseInt(priceStringArr[i]);
    		lowestPriceArr[i+1] = Integer.parseInt(priceStringArr[i]);
    	}
    	
    	for(int i=2; i < cnt+1; i++) {
    		for(int j=1 ; j < i; j++) {
    			lowestPriceArr[i] = Math.min(lowestPriceArr[i-j] + priceArr[j], lowestPriceArr[i]);
    		}
    		
    	}
    	System.out.println(lowestPriceArr[cnt]);
    }
}