알고리즘/백준

[boj 2839] 설탕배달 - js

jinux127 2022. 2. 26. 13:54

처음 제출한 코드

// 설탕배달

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n').map(Number); // 제출용
// let input = fs.readFileSync('input.txt').toString().trim().split('\n').map(Number); // vscode 테스트용

const N = input[0];

// 3kg, 5kg 봉지가 있고 최대한 적은 봉지로 배달 정확하게 Nkg 나눠서 운반해야함, 정확하게 N을 만들 수 없다면 -1 출력

const sol = (a) => {
    let cnt = 0;
    cnt += Math.floor(a/5);
    a %= 5;
    cnt += Math.floor(a/3);
    a %= 3;
    a > 0 ? console.log(-1) : console.log(cnt);
}

sol(N);

최소한의 봉지로 정확하게 배달해야 하기때문에 5로 먼저 나누고 나머지 값을 3으로 나누면 된다고 생각했다. 하지만 5로 나눠지지않고 3으로 먼저 나누면 정확하게 Nkg를 운반할 수 있는경우를 계산하지 못했다.

수정한 코드

// 설탕배달

let fs = require('fs');
// let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n').map(Number); // 제출용
let input = fs.readFileSync('input.txt').toString().trim().split('\n').map(Number); // vscode 테스트용

const N = input[0];

// 3kg, 5kg 봉지가 있고 최대한 적은 봉지로 배달 정확하게 Nkg 나눠서 운반해야함, 정확하게 N을 만들 수 없다면 -1 출력

const sol = (a) => {
    let cnt = 0;
    while(true){
        if(a % 5 === 0){
            console.log(a / 5 + cnt);
            break;
        } else if(a<=0){
            conmsole.log(-1);
            break;
        }
        a -= 3;
        cnt++;
    }
}

sol(N);

5로 나눠지면 몫을 카운트에 더하여 출력하고, 나눠지지않으면 3kg씩 포장하며 카운트하며 이걸 반복한다. 만약 a가 0이하로 간다면 Nkg에 딱 맞춰 포장할 수 없단 얘기이므로 -1을 출력한다.