본문 바로가기
코딩테스트 뿌수기

[백준 11047번 node.js] 동전 0

by hans-j 2024. 6. 9.

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);