지나공 : 지식을 나누는 공간

[백준] 4796번_캠핑 C++ 풀이 본문

Algorithm/백준

[백준] 4796번_캠핑 C++ 풀이

해리리_ 2021. 1. 11. 23:38

 

 

문제링크 : www.acmicpc.net/problem/4796

 

4796번: 캠핑

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.

www.acmicpc.net

 

주석 없는 코드

#include <iostream>
using namespace std;

int l, p, v,i;
int main() {
	do {
		i++;
		cin >> l >> p >> v;
		if (l == 0 && p == 0 && v == 0)
			break;
		int ans = (v / p) * l + min(v % p, l);
		cout <<"Case "<<i<<": "<< ans<<"\n";
	} while (1);
	return 0;
}

 

 

주석 있는 코드

#include <iostream>
using namespace std;

int l, p, v,i;
int main() {
	do {
		i++; //case번호
		cin >> l >> p >> v;
		if (l == 0 && p == 0 && v == 0)
			break;
        //추가설명하겠음
		int ans = (v / p) * l + min(v % p, l);
		cout <<"Case "<<i<<": "<< ans<<"\n";
	} while (1);
	return 0;
}

 

 

ans = (v/p) * l + min(v%p, l)인데,

(v/p) * l 은 연속하는 p일이 v일 중에 몇 번인지 세고, 각 p일 중 l일만 사용 가능하므로 이런 식이 나오는 것이다.

min(v%p, l)을 더하는 부분은 만약 l,p,v가 5, 8, 20이라고 할 때 연속하는 8일씩 돌고 난 뒤 남은 나머지 4일에 대한 것이다. 나머지와 사용가능일수를 비교해서 더 적은 날만큼 더 이용이 가능하므로 위의 식을 더한다.

 

728x90
Comments