문제 풀이/백준
[백준]2293번. 동전1(JAVA)
27200
2024. 4. 18. 18:54
https://www.acmicpc.net/problem/2293
풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[] arr = new int[n + 1];
int[] dp = new int[k + 1];
dp[0] = 1;
for(int i = 1 ; i <= n; i++) {
arr[i] = Integer.parseInt(br.readLine());
for (int j = arr[i]; j <= k; j++)
dp[j] += dp[j - arr[i]];
}
System.out.println(dp[k]);
}
}
dp를 이용해 부분적으로 해결해나가는 문제이다.
문제 풀이에 대해 생각해보면
처음에 1원 동전으로 구할 수 있는 것을 모두 구한다.
그 다음에 7원을 만든다고 생각해보자. 1원으로 만들 수 있는 방법에다가 2원짜리를 뺀 5원을 만드는 방법을 구해서 더하면 된다. 또한 이 5원을 만드는 방법 역시 이 전에 1원으로만 만드는 방법 + 2원으로 만드는 방법 + 5원으로 만드는 방법이 계속해서 추가되는 방식인 것이다.
이해가 잘 안 된다면 코드에 직접 값을 넣고 손으로 하나씩 따라가보면서 점화식을 본인의 것으로 만드는 것이 중요하다고 생각한다.