2293번: 동전 1
첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.
www.acmicpc.net
import java.io.*;
import java.util.*;
class Main{
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
static StringBuilder sb=new StringBuilder();
public static void main(String args[]) throws Exception {
// String s[]=br.readLine().split(" ");
// int N=Integer.parseInt(s[0]);
// int K=Integer.parseInt(s[1]);
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int K=sc.nextInt();
int[] arr=new int[K+1];
int coin[]=new int[N];
for(int i=0;i<N;i++) {
coin[i]=sc.nextInt();
}
arr[0]=1;
for(int i=0;i<N;i++) {
for(int j=1;j<=K;j++) {
if(j>=coin[i]) arr[j]+=arr[j-coin[i]];
}
}
System.out.println(arr[K]);
}
}
이 문제는 아래 블로그 링크를 참고하여 풀어보았습니다.
백준 2293 : 동전 1
링크 : https://www.acmicpc.net/problem/2293 과거 코딩테스트에서 본 적이 있는 문제인데, 당시에는 세가지의 동전이 정해져있어서 삼중포문을 돌려버렸다. DP에 대한 개념이 전혀 없어서.. 미쳤다 미쳤��
extracold.tistory.com
이 문제의 포인트는 아래 식입니다.
i원을 만드는 방법의 수=i-1원을 만드는 방법의 수+1원을 만드는 방법의 수
+i-2원을 만드는 방법의 수+2원을 만드는 방법의 수
...+i-n원을 만드는 방법의 수+n원을 만드는 방법의 수
이 식을 구현한 것이 위 코드의 arr[j]+=arr[j-coin[j]]입니다.
방법들을 모두 더해서 arr[K]에는 K원을 만드는 경우의 수가 저장되게 됩니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
[BOJ 1520번] 내리막길(JAVA) (0) | 2020.09.14 |
---|---|
[BOJ 11066번] 파일 합치기(JAVA) (0) | 2020.09.11 |
[BOJ 1655번] 가운데를 말해요(JAVA) (0) | 2020.09.09 |
[BOJ 11279번] 최대 힙(JAVA) (0) | 2020.09.08 |
[BOJ 1927번] 최소 힙 (JAVA) (0) | 2020.09.07 |