문제 출처:https://leetcode.com/problems/lemonade-change/
문제를 간단히 해석하자면, $5짜리 레몬에이드를 사기위해 줄서있는 사람들이 bills라는 인풋으로 주어진다. 이때에 손님이 $5보다 높은 돈을 낼 경우 거스름돈을 같이 주어야하는데 제일 처음에는 잔돈이 없기 때문에 손님으로부터 구해야한다. 돈의 종류는 [5, 10, 20]으로 정해져 있으며, $10을 낸 경우 $5를 $20을 낸 경우 $15를 거슬러줘야 한다.
이 문제에서 $5는 그냥 $5를 주면 되지만, $15는 $5 + $10으로 가능하며 $5짜리 3개로도 가능하다. 이점만 유의해준다면 문제없이 해결할 수 있을 것이다.
코드는 다음과 같습니다:
#define FIVE 0
#define TEN 1
#define TWENTY 2
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int changes[3] = {0, } ;
bool answer = true ;
for(auto bill : bills){
if(bill == 5){
changes[FIVE] += 1 ;
}
else if(bill == 10){
if(changes[FIVE] <= 0){
answer = false ;
break ;
}
changes[FIVE] -= 1 ;
changes[TEN] += 1 ;
}
else{
if(changes[FIVE] <= 0 || changes[FIVE] < 3 && changes[TEN] <= 0){
answer = false ;
break ;
}
else{
if(0 < changes[TEN]){
changes[FIVE] -= 1 ;
changes[TEN] -= 1 ;
}
else
changes[FIVE] -= 3 ;
changes[TWENTY] += 1 ;
}
}
}
return answer ;
}
};
Leetcode 문제 860번 Lemonade Change
해당 문제는 Github에서도 보실 수 있습니다:
https://github.com/gurcks8989/CodingTest/blob/master/LeetCode/P860_Lemonade_Change.cpp
훈수 및 조언은 언제든 환영입니다.