그리디


11047번 (동전 0)

const fs = require('fs');
const input = fs.readFileSync('./dev/stdin').toString().trim().split('\n');
let [N, K] = input.shift().split(' ').map(Number);
const coins = input.map(Number);
let answer = 0;
let temp = 0;
for (let i = N - 1; i >= 0; i--) {
if (K >= coins[i]) {
temp = Math.floor(K / coins[i]);
K = K - coins[i] * temp;
answer += temp;
}
}
console.log(answer);
  • for문을 이용해 가장 큰 수 부터 K가 해당 코인보다 크다면 나누어주었다.
  • 그 몫을 answer에 더하고, K는 나머지를 넣어주었다.
  • 11399번 (ATM)

    const fs = require('fs');
    const input = fs.readFileSync('./dev/stdin').toString().trim().split('\n');
    const N = +input.shift();
    let people = input.shift().split(' ').map(Number);
    let answer = 0;
    people = people.sort((a, b) => a - b);
    for (let i = 0; i < N; i++) {
    for (let j = 0; j <= i; j++) {
    answer += people[j];
    }
    }
    console.log(answer);
  • 가장 작은 수부터 나열해야 합이 적기 때문에 정렬 후 이중 for문을 통해 더해주었다.