-
[2294] 동전 2 - Java[자바]자바/백준 2023. 9. 27. 18:38
| 문제 링크
https://www.acmicpc.net/problem/2294
2294번: 동전 2
첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어
www.acmicpc.net
| 문제
- N개의 종류의 동전을 활용해 동전들의 합이 K가 되는 최소한의 동전 갯수를 출력하시오.
동전의 합으로 K를 만들 수 없다면 -1을 출력
| 풀이
- 길이가 K+1인 배열을 생성합니다.
- i번째 배열의 값에 대해 동전을 하나씩 값을 탐색합니다. 동전의 크기보다 인덱스가 큰 경우에는 동전의 크기 만큼 전의 인덱스 값(해당 인덱스에는 해당 값을 구성한 동전의 최소 개수가 입력되어 있음)에 +1을 입력해 줍니다.
- 2번에서 구한 인덱스 별 각각의 동전의 개수 중 최소 값을 해당 인덱스 값으로 설정합니다.
| 코드
import java.io.*; import java.util.Arrays; import java.util.StringTokenizer; public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); int[] tokens = new int[n+1]; int[] dp = new int[m+1]; for(int i = 1; i<=n; i++) { tokens[i] = Integer.parseInt(br.readLine()); } for(int i = 1; i<=m; i++) { int min = Integer.MAX_VALUE-1; for(int j = 1; j<=n; j++) { if(i>=tokens[j]) { min = Math.min(min,dp[i-tokens[j]]+1); } } dp[i] = min; } if(dp[m]<Integer.MAX_VALUE-1) bw.write(String.valueOf(dp[m])); else bw.write("-1"); br.close(); bw.close(); } }
'자바 > 백준' 카테고리의 다른 글
[1948] 임계경로 - Java[자바] (0) 2023.09.29 [1516] 게임 개발 - Java[자바] (0) 2023.09.28 [2293] 동전1 - Java[자바] (0) 2023.09.27 [17070] 파이프 옮기기1 - Java[자바] (0) 2023.09.26 [10868] 최솟값 - Java[자바] (0) 2023.09.22 - N개의 종류의 동전을 활용해 동전들의 합이 K가 되는 최소한의 동전 갯수를 출력하시오.