11047문제 동전(그리디) Java

2021. 9. 24. 16:57알고리즘/백준

반응형

문제

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.

동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)

둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai Ai-1의 배수)

출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.

 

출처: <https://www.acmicpc.net/problem/11047>

 

11047번: 동전 0

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

www.acmicpc.net

 

##문제이해##

가장 최소한의 동전을 사용해서 몇개인지를 구하는건데

예제로 가져온부분을 봤을때

4200 기준으로 4000짜리 동전4 100짜리 동전2개가 최선의 방법이라고 나온다.

결국 가장 높은값으로(동전) 먼저 처리하고 뒤의 높은값으로 처리하고를 반복해서 높은것부터 처리된뒤 낮은걸 처리하면 가장 적은수가 나오게된다.

 

##코드##

import java.util.Scanner;

public class boj_11047 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); //동전종류갯수
		int price = sc.nextInt();
		int arr[] = new int[N];
		for(int i=0; i<N; i++) {
			arr[i] = sc.nextInt();
		}
		int cnt=0;
		for(int i=N-1; i>=0; i--) {
			if(price%arr[i]<=price) {
				cnt += price/arr[i];
				price = price%arr[i];
			}else {
				
			}
		}
		System.out.println(cnt);
		
	}

}
반응형