이 튜토리얼에서는 다음과 같은 문제를 함께 해결해 보겠습니다.
문제 정의
N리터 용량의 물탱크가 있고, 펌프가 분당 S의 속도로 물을 채운다고 가정해 봅시다. 그런데 안타깝게도 탱크에 구멍이 뚫려 있어서, 물을 채우는 동안 분당 WS의 속도로 물이 새어 나갑니다.
우리가 구해야 할 것은 바로 탱크를 가득 채울 때까지 낭비되는 물의 총량입니다.
해결 접근 방식
이 문제는 간단한 수학적 계산으로 해결할 수 있습니다.
먼저, 분당 실제로 탱크에 채워지는 물의 양은 유입 속도(S)에서 유출 속도(WS)를 뺀 값과 같습니다.
다음으로, 물탱크의 용량(N)을 분당 실제 충전량으로 나누면 탱크를 가득 채우는 데 필요한 총 시간을 구할 수 있습니다.
마지막으로, 새어 나가는 물의 속도(WS)에 충전에 걸린 총 시간을 곱하면 낭비된 물의 전체 양을 손쉽게 계산할 수 있습니다.
정리하면 다음 공식이 성립합니다.
- 실제 충전 속도 = S - WS
- 충전 소요 시간 = N ÷ (S - WS)
- 낭비된 물의 양 = WS × 충전 소요 시간
구현 예제
그럼 이 로직을 C++ 코드로 직접 확인해 보겠습니다.
#include <iostream>
using namespace std;
double countTheWastedWater(double N, double S, double WS) {
double wasted_water, fill_per_minute, time_to_fill;
fill_per_minute = S - WS; // 분당 실제 충전 속도
time_to_fill = N / fill_per_minute; // 탱크를 채우는 데 걸리는 시간
wasted_water = WS * time_to_fill; // 낭비된 물의 총량
return wasted_water;
}
int main() {
double N, S, WS;
N = 275; // 탱크 용량 (리터)
S = 10; // 분당 유입 속도
WS = 3; // 분당 유출 속도
cout << countTheWastedWater(N, S, WS) << endl;
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
117.5
동작 원리 살펴보기
예제의 값으로 단계별로 계산해 보면 다음과 같습니다.
- 실제 충전 속도: 10 - 3 = 7 (분당 7리터)
- 충전 소요 시간: 275 ÷ 7 ≈ 39.29분
- 낭비된 물의 양: 3 × 39.29 = 117.5리터
즉, 탱크에 물을 가득 채우는 동안 약 117.5리터의 물이 구멍으로 새어 나가게 됩니다.
마무리
이처럼 기본적인 산술 연산만으로도 누수가 있는 탱크에서 낭비되는 물의 양을 쉽게 계산할 수 있습니다. 이 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨 주세요!