입력받은 k 길이 만큼의 배열을 Integer.MAX_VALUE로 초기화.
입력 받은 동전의 가치를 활용해 순차적으로 dp의 최소 값을 계속해서 갱신 해 나가면 된다!
ex)
문제에서 동전의 가치가 1인 것만을 입력 받았을 때에는
dp[5]=5 일 것입니다. (1의 가치가 5개가 모여야 하니)
이제 동전의 가치가 5인 것도 입력을 받고 나면?!
dp[5]=1 로 갱신 될 것입니다!
이렇게 순차적으로 갱신해 나가면 이 문제는 끝입니다!
[도출된 점화식]
dp[n]=min(dp[n],dp[n-동전의 가치]+1)
유의 사항 😥
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int n,k;
static int[] arr;
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine()," ");
n=Integer.parseInt(st.nextToken());
k=Integer.parseInt(st.nextToken());
arr=new int[n+1];
for(int i=1;i<=n;i++)
{
st=new StringTokenizer(br.readLine());
arr[i]=Integer.parseInt(st.nextToken());
}
int[] dp=new int[k+1];
for(int i=1;i<=k;i++){
dp[i]=Integer.MAX_VALUE-1;
}
for(int i=1;i<=n;i++){
for(int j=arr[i];j<=k;j++){
dp[j]=Math.min(dp[j],dp[j-arr[i]]+1);
}
}
if(dp[k]==Integer.MAX_VALUE-1)
System.out.println(-1);
else
System.out.println(dp[k]);
}
}
왜 MAX_VALUE -1로 해주신건가요? MAX_VALUE로 하면 틀렸다하고 -1해주니까 정답이라고 나오네요 ㅠㅠ