🔥 Algorithm/Baekjoon
[백준 11047번] 동전 0 - 자바스크립트(nodejs)
Lennon
2022. 1. 23. 16:28
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
const fs = require('fs');
let [N, ...nums] = fs.readFileSync('dev/stdin').toString().trim().split(/\s+/).map(Number);
let price = nums.shift();
nums.sort((a, b) => b - a);
let count = 0;
for (let i = 0; i < nums.length; i++) {
if (price < nums[i]) {
continue;
} else {
const value = Math.floor(price / nums[i]);
price -= value * nums[i];
count += value;
if (price === 0) {
break;
}
}
}
console.log(count);
그리디 알고리즘 문제이다. 최적의 방법을 찾아야 하므로 동전의 금액에 대해 내림차순으로 정렬한다.
그 후 배열을 순회하며 price보다 큰 동전들은 continue로 넘겨주고, 작은 값들이 나오면 최대 개수만큼 빼준다.
=> 가격이 4500원이고, 동전 list가 [5000,1000,500] 이면 5000은 넘기고, 1000에서 4번, 500에서 1번 해주는 게 최적의 방법이다.
price가 0이 되었을 때 반복문을 멈추고 count를 return해주면 끝!
728x90
반응형