728x90
반응형
문제
준규가 가지고 있는 동전은 총 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원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.
소스코드
전형적인 그리디 알고리즘으로 해결할 수 있는 문제다. 동전 개수 최솟값을 구하기 위해서는 가장 큰 가치를 지닌 동전으로 나눠가면서 해결하면 된다. 필자는 문제를 해결할 때 주어진 모든 동전들을 활용했는데, 좀 더 최적화하면 동전 배열에 필터 메서드를 활용해서 K의 값보다 큰 동전들을 제외하고 시작하면 좀 더 순회조건을 줄일 수 있을 것이다.
const fs = require('fs');
let [nk, ...rest] = fs.readFileSync('./dev/stdin').toString().split('\n');
let [n, k] = nk.split(' ');
let result = 0;
while(rest.length && k > 0) {
const num = parseInt(rest.pop());
k = parseInt(k);
while(num <= k && k > 0) {
k = k - num;
result++;
}
}
console.log(result);
728x90
반응형
그리드형
'Computer science > 알고리즘' 카테고리의 다른 글
[백준, node.js] 11052번 "카드 구매하기" 문제 해결방법 (0) | 2022.02.01 |
---|---|
[백준, node.js] 2156번 "포도주 시식" 문제 해결방법 (0) | 2022.01.24 |
[백준, node.js] 2193번 "이친수" 문제 해결방법 (0) | 2022.01.20 |
[백준, node.js] 11726번 "2xn 타일링" 문제 해결방법 (0) | 2022.01.17 |
[백준, node.js] 1463번 "1로 만들기" 문제 해결방법 (0) | 2022.01.15 |
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.