[백준, node.js] 11047번 "동전 0" 문제 해결방법

남양주개발자

·

2022. 1. 23. 21:31

728x90
반응형

[백준, node.js] 11047번 "동전 0" 문제 해결방법

문제

준규가 가지고 있는 동전은 총 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
반응형
그리드형

이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

💖 저자에게 암호화폐로 후원하기 💖

아이콘을 클릭하면 지갑 주소가자동으로 복사됩니다