Algorithm/LeetCode

[LeetCode] - Water Bottles

물병으로 물사먹기 문제

 

물병과 교환비율이 주어지고

물병을 다 마시고 난 빈병을 교환 하여 다시 물병을 구할 수 있다.

이를 반복하여 마신 총 병의 갯수를 구하라.

 

Input: numBottles = 9, numExchange = 3

Output: 13

Explanation: You can exchange 3 empty bottles to get 1 full water bottle. Number of water bottles you can drink: 9 + 3 + 1 = 13.

 

Constraints:

  • 1 <= numBottles <= 100
  • 2 <= numExchange <= 100

 

의사 코드

예제 1번을 보면
9개의 물과 3의 교환비율이 정해졌다.
9 + (9/3) + (9/3)/3) = 13
몫이 numExchange보다 클 경우 계속 더해주는 풀이

1차 시도

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        int maximumBottles = 0;
        if(numBottles < numExchange) {
            return numBottles;
        }else {
            maximumBottles = numBottles;
            int temp = numBottles / numExchange;
            while(temp >= numExchange) {
                maximumBottles = maximumBottles + temp;
                temp = numBottles / numExchange;
            }
        }
        return maximumBottles;
    }
}

 

2차 시도

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        int maximumBottles = 0;
        if(numBottles < numExchange) {
            return numBottles;
        }else {
            while(numBottles >= numExchange) {
                maximumBottles += numBottles;
                numBottles = numBottles / numExchange;
            }
            maximumBottles += numBottles;
        }
        return maximumBottles;
    }
}
Error Case
Input 15, 4
Output 18
Expected 19

 

3차시도

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        int maximumBottles = numBottles;
        int emptyBottles = numBottles;
        if(numBottles < numExchange) {
            return numBottles;
        }else {
            while(emptyBottles >= numExchange){
                numBottles = exchange(emptyBottles, numExchange);
                maximumBottles += numBottles;
                emptyBottles = numBottles + (numBottles % numExchange);
            }
        }
        return maximumBottles;
    }
    
    public int exchange(int emptyBottles, int numExchange){
        return emptyBottles / numExchange;
    }
    
}
Error Case
Input: 15, 8
Output: 16
Expected: 17

 

4차시도

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        int maximumBottles = numBottles;
        int emptyBottles = numBottles;
        if(numBottles < numExchange) {
            return numBottles;
        }else {
            while(emptyBottles >= numExchange){
                numBottles = exchange(emptyBottles, numExchange);
                int temp = numBottles + (emptyBottles % numExchange);
                emptyBottles = 0;
                maximumBottles += numBottles;
                emptyBottles += temp;
            }
        }
        return maximumBottles;
    }
    
    public int exchange(int emptyBottles, int numExchange){
        return emptyBottles / numExchange;
    }
    
}

Runtime: 0 ms, faster than 100.00% of Java online submissions for Water Bottles.
Memory Usage: 35.5 MB, less than 73.63% of Java online submissions for Water Bottles.

'Algorithm > LeetCode' 카테고리의 다른 글

[LeetCode] - Height Checker  (0) 2021.04.23
[LeetCode] - Masking Personal Information  (0) 2021.04.22
[LeetCode] - happy number  (0) 2021.04.20
[LeetCode] - Missing Number  (0) 2021.04.19
[LeetCode] - Remove Element  (0) 2021.04.16