동전의 개수를 최소한으로 사용하여 원하는 값을 만들면 된다. i번째 동전의 단위는 i-1번째 동전 단위의 배수이므로 그냥 단순하게 큰 단위부터 동전을 사용하면 최소 동전 개수를 구할 수 있다.
(async () => {
let rl = readline.createInterface({input:process.stdin});
let data = [];
// data.length가 동전 단위 가짓수와 같아질 때까지 입력 받음
for await (const line of rl){
let data_len = data.length;
if (data_len > 0 && data_len == data[0][0]){
rl.close();
}
// split을 하지 않고 그냥 push하는 편이 계산이 쉬웠을 것 같다.
data.push(line.split(' ').map((el)=>Number(el)));
}
solution(data);
process.exit();
})();
새로운 입출력 스타일을 도전해 보았다. 그냥 기존처럼 rl.on 방식을 사용하는 편이 더 편한 것 같다.
const solution = (data) => {
const N = data[0][0]
const K = data[0][1]
let remain = K;
let cnt = 0;
let i = N;
while (remain > 0){
cnt += Math.floor(remain/data[i][0]);
remain = remain%data[i][0];
i--;
}
console.log(cnt);
}
큰 단위부터 동전을 사용해서 원하는 숫자를 표현한다. 이때 몫 연산이 필요했는데, JS는 몫 연산을 지원하지 않아 'Math.floor()'로 직접 내림을 해줘야 한다.
const solution = (data) => {
const N = data[0][0]
const K = data[0][1]
let remain = K;
let cnt = 0;
let i = N;
while (remain > 0){
cnt += Math.floor(remain/data[i][0]);
remain = remain%data[i][0];
i--;
}
console.log(cnt);
}
const readline = require('readline');
(async () => {
let rl = readline.createInterface({input:process.stdin});
let data = [];
for await (const line of rl){
let data_len = data.length;
if (data_len > 0 && data_len == data[0][0]){
rl.close();
}
data.push(line.split(' ').map((el)=>Number(el)));
}
solution(data);
process.exit();
})();