알고리즘/백준
[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을 출력한다.