물병으로 물사먹기 문제
물병과 교환비율이 주어지고
물병을 다 마시고 난 빈병을 교환 하여 다시 물병을 구할 수 있다.
이를 반복하여 마신 총 병의 갯수를 구하라.
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 |