Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 N루피로 구입할 수 있는 최대 물의 양 구하기

문제 설명

N루피가 주어졌을 때, 이 돈으로 최대한 많은 물을 구입하는 것이 목표입니다. 물병의 종류에 따라 가격이 다르며, 각 병의 용량은 모두 1리터입니다.

  • 플라스틱 병: 1리터당 A루피
  • 유리 병: 1리터당 B루피
  • 빈 병 반납: 유리 병을 반납하면 개당 E루피를 환불받을 수 있음

유리 병은 사용 후 반납하면 E루피를 돌려받으므로, 실질적인 구입 비용은 B-E루피가 됩니다. 따라서 최적의 구입 전략은 다음과 같습니다.

  • 플라스틱 병 가격(A)이 여전히 B-E보다 저렴하다면 플라스틱 병만 구입합니다.
  • 그렇지 않다면 유리 병을 우선적으로 최대한 구입한 뒤, 남은 돈으로 플라스틱 병을 추가로 구입합니다.

입력 및 출력 예시

예시 1

N = 6, A = 5, B = 4, E = 3;
최대 물의 양: 3리터

설명: B-E = 1이고 1 < A이므로 유리 병을 구입하는 것이 유리합니다. N-E = 3루피로 1리터짜리 유리 병 3개를 구입할 수 있습니다.

예시 2

N = 10, A = 5, B = 10, E = 3;
최대 물의 양: 2리터

설명: B-E = 7이고 7 > A이므로 플라스틱 병만 구입하는 것이 유리합니다. 10 ÷ 5 = 2개의 플라스틱 병을 구입할 수 있습니다.

알고리즘 접근 방법

  • money(보유 금액), pbottle(플라스틱 병 가격), gbottle(유리 병 가격), gempty(환불액) 변수로 가격 정보와 보유 금액을 관리합니다.
  • maxWater(int mny, int pb, int gb, int ge) 함수가 모든 값을 매개변수로 받아 구입 가능한 물의 양을 출력합니다.
  • litrs 변수에는 계산된 물의 양(리터)이 저장됩니다.
  • 유리 병의 새로운 가격(원래 가격 − 환불액)을 gb 값으로 전달합니다.
  • 전달받은 gb 값이 pb 값보다 작으면, 즉 유리 병 구입이 유리하면 (mny-ge)/gb개의 유리 병을 구입합니다.
  • 구입에 사용한 금액을 차감해 남은 돈을 계산합니다(mny -= litrs * gb).
  • 남은 돈으로 구입할 수 있는 플라스틱 병의 수는 mny / pb개입니다.
  • 전달받은 pb 값이 더 크면, 즉 플라스틱 병만 유리하면 mny / pb개의 플라스틱 병만 구입합니다.
  • 두 경우 모두 결과를 출력합니다. 병 하나의 용량이 1리터이므로 병의 개수가 곧 물의 리터 수입니다.

C++ 구현 예제

// 위 접근 방식의 C++ 구현
#include<bits/stdc++.h>
using namespace std;
void maxWater(int mny,int pb,int gb,int ge){
    int litrs;
    // 유리 병 구입이 유리한 경우
    if (gb < pb){
        // 유리 병 개수
        int tmp=mny-ge/gb;
        litrs=tmp>0?tmp:0;
        mny-=litrs*gb;
        // 플라스틱 병 개수
        litrs+=mny/pb;
        cout<<"Maximum Liters of water : "<<litrs<<endl;
    }
    // 플라스틱 병만 구입하는 경우
    else
        cout<<"Maximum Liters of water only Plastic bottles : "<<(mny /pb)<<endl;
}
int main(){
    int money = 20, pbottle=5, gbottle=10, gempty = 8;
    gbottle=gbottle-gempty; // 유리 병의 새로운 가격
    maxWater( money,pbottle,gbottle,gempty );
}

출력 결과

Maximum Liters of water: 14

실행 결과 money = 20, 플라스틱 병 가격 = 5, 유리 병 원래 가격 = 10, 환불액 = 8이 주어졌습니다. 유리 병의 실질 가격은 10 − 8 = 2루피로 플라스틱 병(5루피)보다 저렴하기 때문에 유리 병을 우선 구입하는 분기로 진행되며, 최종적으로 14리터의 물을 구입할 수 있습니다.