코딩테스트 뿌수기
[백준 11047번 node.js] 동전 0
hans-j
2024. 6. 9. 21:36
https://www.acmicpc.net/problem/11047
필요한 동전 개수의 최솟값을 구하는 프로그램 작성하기
해결방법
1. 주어진 문자열에서 필요한 값 추출
let targetAmount = givenData.split('\n')[0].split(' ').map(Number)[1];
let array = givenData.split('\n').map(Number).slice(1).reverse();
2. 거꾸로 정렬되어있는 배열에서 목표금액과 배열에있는 동전들의 아이템들을 비교한다.
array.reduce((acc,curr)=>{});
3. 목표금액보다 작은 동전 아이템이 나오면!! 나누기를 실시하고 정수만 추출
acc.count = acc.count + Math.floor(acc.remaining / curr);
4. 이때 위의 단계에서 추출한 정수와 해당 동전아이템의 단위를 곱해서 빼준다
-> 얼마를 더 계산해야하는지 알아야하니께
acc.remaining = acc.remaining - Math.floor(acc.remaining / curr) * curr;
5. 위의 계산을 남아있는 값이 없을때까지 실행한다
-> 조건문 추가
if(curr > acc.remaining) return acc;
6. 완성
let targetAmount = givenData.split('\n')[0].split(' ').map(Number)[1];
let array = givenData.split('\n').map(Number).slice(1).reverse();
let result = array.reduce((acc,curr)=>{
if(curr > acc.remaining) return acc;
acc.count = acc.count + Math.floor(acc.remaining / curr);
acc.remaining = acc.remaining - Math.floor(acc.remaining / curr) * curr;
return acc;
}, {count: 0, remaining: targetAmount});
7. 제출
const fs = require('fs');
const filePath = process.platform === "linux" ? '/dev/stdin' : __dirname + '/input.txt';
const input = fs.readFileSync(filePath).toString().trim();
let targetAmount = input.split('\n')[0].split(' ').map(Number)[1];
let array = input.split('\n').map(Number).slice(1).reverse();
let result = array.reduce((acc,curr)=>{
if(curr > acc.remaining) return acc;
acc.count = acc.count + Math.floor(acc.remaining / curr);
acc.remaining = acc.remaining - Math.floor(acc.remaining / curr) * curr;
return acc;
}, {count: 0, remaining: targetAmount});
console.log(result.count);