넘치게 채우기

[LeetCode] 1518. Water Bottles 본문

PS/LeetCode

[LeetCode] 1518. Water Bottles

riveroverflow 2024. 7. 7. 13:49
728x90
반응형

https://leetcode.com/problems/water-bottles/description/

leetcode - water bottles

문제 유형 : 구현, 그리디

문제 난이도 : Easy

 

문제

There are numBottles water bottles that are initially full of water. You can exchange numExchange empty water bottles from the market with one full water bottle.

The operation of drinking a full water bottle turns it into an empty bottle.

Given the two integers numBottles and numExchange, return the maximum number of water bottles you can drink.

 

numBottles개의 꽉찬 물병이 있다. numExchange만큼의 빈 물병을 하나의 꽉찬 물병으로 교환할 수 있다.

numBottles와 numExchange를 입력받는다. 최대 몇 병 마실 수 있는지 구하시오.

 

풀이

우선, numBottles개만큼 누적시킨다. 우선 이만큼은 다 마셔준다.

교환하고 남은 빈병, 즉 numBottles % numExchange를 빈병개수에 누적시키고,

교환받은 물병 numBottles는 numBottles / numExchange로 저장시킨다.

 

그리고, 누적 빈병개수가 교환가능해질 수도 있다.

numBottles에 빈병개수/numExchange를 더하고,

빈병개수 = 빈병개수 % numExchange로 교환 후 남은 빈병을 저장한다.

이를 numBottles가 0이 될때까지 해주면 된다.

 

코드

C++

class Solution {
public:
    int numWaterBottles(int numBottles, int numExchange) {
        int ans = 0;
        int emptyBottles = 0;
        while(numBottles > 0) {
            ans += numBottles;
            emptyBottles += numBottles % numExchange;
            numBottles /= numExchange;

            numBottles += emptyBottles / numExchange;
            emptyBottles %= numExchange;
        }
        return ans;
    }
};
728x90
반응형