정다윤 풀이
// 처음에 DP로 풀었는데 그냥 그리디로 푸는게 더 빠름! const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt"; let N = require("fs").readFileSync(filePath).toString().trim(); let count = 0; while (true) { if (N % 5 === 0) { console.log(N / 5 + count); break; } if (0 > N) { console.log(-1); break; } count++; N -= 3; }
김민수 풀이
let input = parseInt(require('fs').readFileSync(__dirname + "/../input.txt").toString()) // let input = parseInt(require('fs').readFileSync("/dev/stdin").toString()); // 1번 풀이 - 이게 더 빠름 let cnt = 0; while(true){ if(input % 5 === 0){ cnt += input / 5 break; } input -= 3; cnt += 1; if(input < 0){ cnt = -1; break; } } console.log(cnt) // 2번 풀이 - DP로 풀어봄 const dp = new Array(input+5).fill(-1); dp[3] = 1; dp[5] = 1; if(input <= 5){ console.log(dp[input]); }else{ for(let i = 6; i < input + 1; i++){ let [a,b] = [dp[i], dp[i]]; if(dp[i-5] !== -1) a = dp[i-5]; if(dp[i-3] !== -1) b = dp[i-3]; if(a > 0 && b > 0) dp[i] = Math.min(a + 1, b + 1); else if(a > 0 && b < 0) dp[i] = a + 1; else if(a < 0 && b > 0) dp[i] = b + 1; else dp[i] = -1; } console.log(dp[input]); }
안재현 풀이
const fs = require("fs"); const filePath = process.platform === "linux" ? "/dev/stdin" : "BOJ/input.txt"; let input = fs.readFileSync(filePath).toString(); let sugar = Number(input); let error = -1; // 정확하게 N킬로그램을 만들 수 없을 경우 -1을 출력하기 위함 let five = Math.floor(sugar / 5); // 큰 수인 5kg이 얼마나 들어갈 수 있는 지 계산 while(five >= 0) { // 큰 수를 빼고 남은 설탕이 얼마인지 계산 let left = sugar - (five * 5); if(left % 3 === 0) { error = left / 3 + five; break; } else { // 3으로 나누어 떨어지지 않으면 N킬로그램을 만들 수 없다. // 큰 수를 하나 뺴주고 다시 구해줌 five -= 1; } } console.log(error);