전형적인 그리디 알고리즘 문제
그리디 알고리즘을 풀 수 있도록 뒤의 동전 가격 A(i)가 앞에 나오는 동전 가격 A(i-1)의 배수가 된다는 조건을 부여했다.
가장 가격이 큰 동전부터 차례대로 사용하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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];
for(int i=0; i<N; i++) {
coin[i] = Integer.parseInt(br.readLine());
}
int count =0;
int sum =0;
for(int i=N-1;i >= 0; i--) {
while(sum + coin[i] <= K) {
sum += coin[i];
count++;
}
}
System.out.println(count);
}
}
나눗셈의 몫과 나머지를 이용해서 더 빠르게 구할 수 있다.
다른 부분의 코드는 로직이 동일하고 간단하기떄문에, 해당 부분만 코드를 작성하겠다.
for(int i=N-1;i >= 0; i--) {
if(A[i] <= K) {
count += (K/A[i]);
K = K % A[i];
}