본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 2293번] 동전 1(JAVA)

by 테크케찰 2020. 9. 10.

www.acmicpc.net/problem/2293

 

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]);
	   
   }
}

 이 문제는 아래 블로그 링크를 참고하여 풀어보았습니다.

extracold.tistory.com/5

 

백준 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원을 만드는 경우의 수가 저장되게 됩니다.