BOJ[4796] - 캠핑 by JavaScript
캠핑
문제
언어
- JavaScript
순서도
- 그리디 기법으로 v 에서 p 로 나눌 수 있는 만큼 나눈 몫에 l 을 곱하기
- v 에서 p 로 나눈 나머지가 l 보다 작다면 나머지를 더하고, l 보다 같거나 크다면 l 을 더하기
문제 풀이 step 1
- 등산가 김강산을 도와서 휴가 기간 동안 캠핑장을 최대한으로 많이 사용할 수 있는 일 수를 구하는 문제입니다.
- 그리디 기법으로 푸는 문제입니다.
- 우선, 휴가 기간 v 를 캠핑장을 연속하는 p 일로 나눠줍니다. 그 몫에 l 을 곱한 만큼 캠핑장을 사용할 수 있습니다.
- 그리고, 휴가 기간 v 를 캠핑장을 연속하는 p 일로 나눈 나머지가
- l 보다 작다면, 그 나머지 만큼 캠핑장을 사용할 수 있습니다.
- l 보다 같거나 크다면, l 만큼 캠핑장을 사용할 수 있습니다.
- 위 과정을 통해서 구한 최대한 캠핑장을 사용할 수 있는 일수를 출력하면 정답입니다.
- 추가 설명은 주석으로 작성하겠습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
let res = "";
let index = 0;
while (true) {
const [l, p, v] = input[index++].split(" ").map(Number);
if (l === 0 && p === 0 && v === 0) break;
let cnt = 0;
// 휴가 기간 v 를 캠핑장을 연속하는 p 일로 나눈 몫에 l 곱하기
cnt += parseInt(v / p) * l;
// 휴가 기간 v 를 캠핑장을 연속하는 p 일로 나눈 나머지가
// l 보다 작은 경우와 l 보다 같거나 큰 경우
if (v % p < l) cnt += v % p;
else cnt += l;
res += `Case ${index}: ${cnt}\n`;
}
return res;
};
console.log(solution(input));