문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
레몬에이드 가판대에서 레몬에이드 한 잔에 $5를 한다. 고객들이 줄을 서서 차례대로(bills에 적힌 순서) 레몬에이드를 주문한다. 각 고객은 레몬에이드를 한 잔씩만 구매하고 $5, $10, $20 지폐로 결정한다. 고객 한 명당 최종 결제 금객이 $5가 되도록 정확한 거스름돈을 제공해야 한다.
정수 배열 bills가 주어졌을 때, bills[i]는 i번째 고객이 지불한 금액이고 모든 고객에게 정확한 잔돈을 제공할 수 있다면 true, 그렇지 않다면 false를 반환해라.
#1
Input: bills = [5, 5, 5, 10, 20]
Output: true
Explanation:
처음 세 명의 고객에서 $5 세장을 받는다.
네번째 고객에서 $10을 받고, $5를 줬다.
다섯번째 고객에서 $10와 $5를 줬다.
모든 고객에게 정확한 잔돈이 지급되어서 true를 반환한다.
#2
Input: bills = [5, 5, 10, 10, 20]
Output: false
Explanation:
처음 두 명의 고객에서 $5 두장을 받는다.
다음 두 명의 고객에서 $10을 받고, $5를 줬다.
마지막 고객에게 $10 두 장 밖에 없어서 $15를 주지 못 했다.
모든 고객이 정확한 거스름돈을 받지 못해서, 답은 false다.
class Solution {
public boolean lemonadeChange(int[] bills) {
int five = 0;
int ten = 0;
for(int bill : bills){
if(bill == 5){
five++;
}else if(bill == 10){
if(five == 0){
return false;
}
five--;
ten++;
}else{
if(ten > 0 && five > 0){
ten--;
five--;
}else if(five >= 3){
five -= 3;
}else{
return false;
}
}
}
return true;
}
}