알고리즘_JS/백준_Greedy
[백준 node.js] 4796번_캠핑
[리우]
2020. 12. 27. 15:30
백준 그리디 알고리즘 4796번_캠핑
난이도 : 실버V
문제 설명
입출력
문제 풀이 : 문제를 쉽게 해석하면 P영업일 동안 L일만 사용할 수 있다. 즉 P가 8, L이 5라고하면 1~8일중 5일만 사용할 수 있고 그다음 9~16일중 5일 사용할 수 있다는 의미이다 즉 영업 쿨타임(?)이 8일이라는 소리이다.
그래서 알고리즘을 휴가일수가 영업일보다 클때까지 휴가일수 - 영업일을 빼면서 사용일수를 카운트 해주면된다.
휴가일수가 영업일 보다 작을때는 휴가일수와 사용일수를 비교하여 더 작은값을 넣어줘야한다.
//실버 5 캠핑
function solution(list) {
let L = 0; //L일 동안
let P = 0; //P일 중
let V = 0; //휴가 일수
let cnt = 0; //이용 일 수
for(let i=0; i<list.length; i++){
cnt = 0;
L = list[i][0];
P = list[i][1];
V = list[i][2];
//휴가 일 수가 캠핑 영업보다 클때까지 반복
while(V > P){
V -= P; // 캠핑을 한번 이용할때 P일 차감
cnt += L; //이용 일 수 카운트
}
//캠핑 영업일 보다 휴가 일 수가 적지만 남은 휴가가 있다.
//이용 가능한 일 수가 휴가일 수 보다 클때 사용기간은 휴가일 수 만큼만 사용가능하다.
if(L > V){
cnt += V;
}
//휴가일수가 클때는 이용가능한 일 수만큼만 사용가능하다.
else{
cnt += L;
}
console.log("Case "+(i+1) +": "+cnt);
}
}
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
let list = [];
rl.on("line", function (line) {
//여러줄 입력
input.push(line);
}).on("close", function () {
//이중 배열로 만들기
for(i of input){
list.push(i.split(" ").map((el) => parseInt(el)));
}
//마지막 입력값 000 없애기
list = list.slice(0,-1);
solution(list);
process.exit();
});
728x90