캠핑

문제

언어

  • JavaScript

순서도

  1. 그리디 기법으로 v 에서 p 로 나눌 수 있는 만큼 나눈 몫에 l 을 곱하기
  2. 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));