728x90
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
공략
백준 알고리즘 분류가 아닌 온라인 강의에 있는 문제를 따라가면서 풀기로 계획을 바꾸었습니다.
알고리즘 중급 1/3 의 그리디 첫번째 문제입니다.
그리디 알고리즘을 처음 소개한대로 이번 문제도 매 순간 최적의 값을 찾아 반복하면 되겠습니다.
목표한 K원만큼을 최소한의 동전으로 채우는 것이 목표입니다.
가치가 큰 동전을 최대한 많이 사용하는 것이 최적의 동전 개수를 구할 수 있는 거겠죠?
import java.util.*;
public class Main {
static Scanner sc = new Scanner(System.in);
// 동전 개수
static int N;
static int K; // 목표 금액
static int[] value; // 동전 별 가치
static int[] numOfCoin;
static int total = 0;
static void input() {
N = sc.nextInt();
K = sc.nextInt();
numOfCoin = new int[N + 1];
value = new int[N + 1];
for (int i = 1; i <= N; i++) {
value[i] = sc.nextInt();
}
}
// 동전 개수의 최솟값을 출력한다.
// 가장 큰 가치의 동전의 최댓값 -> 최적의 값.
static void findAns() {
int k = K;
for (int i = N; i > 0; i--) {
numOfCoin[i] = K / value[i];
K = K - (numOfCoin[i] * value[i]);
total = total + numOfCoin[i];
if (K <= 0) {
// 종료
System.out.println(total);
return;
}
}
System.out.println(total);
// 한번 돌았는데 부족할 때 ? -> 존재 안 함.
}
public static void main(String[] args) {
input();
findAns();
}
}
728x90
'알고리즘' 카테고리의 다른 글
[Algorithm] Greedy 수 묶기(백준) - 에이젠 (0) | 2022.09.10 |
---|---|
[Algorithm] Greedy 잃어버린 괄호(백준) - 에이젠 (0) | 2022.09.09 |
[Algorithm] Greedy 설탕 배달 (백준) - 에이젠 (0) | 2022.09.01 |
[Algorithm] Dijkstra 특정 거리의 도시 찾기 (백준) - 에이젠 (0) | 2022.08.31 |
[Algorithm] Dijkstra 알고스팟 (백준), nextLine() 주의사항 - 에이젠 (0) | 2022.08.30 |
댓글