[JavaScript] 백준 11047번 동전 0

지애·2024년 11월 15일
1

JavaScript

목록 보기
7/7

문제 풀이 아이디어

동전의 개수를 최소한으로 사용하여 원하는 값을 만들면 된다. 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 방식을 사용하는 편이 더 편한 것 같다.

solution

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

})();
profile
차근차근

0개의 댓글

관련 채용 정보