-
백준 2294 (동전 2) <배낭>백준 문제 2024. 4. 17. 17:57728x90
n가지 종류의 동전이 있다. 이 동전들을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그러면서 동전의 개수가 최소가 되도록 하려고 한다. 각각의 동전은 몇 개라도 사용할 수 있다.
예를 들어 동전이 3개 주어지고, 각각 1, 5, 12 이고, k = 15이면 정답은 3이다.
전형적인 배낭 문제이다.
int []coin = new int[n+1]; int []dp = new int[k+1]; for(int i=1;i<=k;i++){ dp[i] = 10001; } for(int i=1;i<=n;i++){ st = new StringTokenizer(br.readLine()); coin[i] = Integer.parseInt(st.nextToken()); for(int j = coin[i];j<=k;j++){ dp[j] = Math.min(dp[j], dp[j-coin[i]] + 1); } }
전체 코드이다.
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 []coin = new int[n+1]; int []dp = new int[k+1]; for(int i=1;i<=k;i++){ dp[i] = 10001; } for(int i=1;i<=n;i++){ st = new StringTokenizer(br.readLine()); coin[i] = Integer.parseInt(st.nextToken()); for(int j = coin[i];j<=k;j++){ dp[j] = Math.min(dp[j], dp[j-coin[i]] + 1); } } if(dp[k] == 10001) System.out.println(-1); else System.out.println(dp[k]); } }
'백준 문제' 카테고리의 다른 글
백준 19236 (청소년 상어) (1) 2024.04.05 백준 9084 (동전) <배낭 문제> (0) 2024.03.21 백준 9489 (사촌) <부모 노드 활용> (0) 2024.03.20 백준 18116 (로봇 조립) (0) 2024.03.20 백준 21939 (문제 추천 시스템 Version 1) (0) 2024.03.20