문제
At a lemonade stand, each lemonade costs $5. Customers are standing in a queue to buy from you and order one at a time (in the order specified by bills). Each customer will only buy one lemonade and pay with either a $5, $10, or $20 bill. You must provide the correct change to each customer so that the net transaction is that the customer pays $5.
Note that you do not have any change in hand at first.
Given an integer array bills where bills[i] is the bill the ith customer pays, return true if you can provide every customer with the correct change, or false otherwise.
레모네이드 판매대에서 레모네이드 한 개당 가격은 5달러입니다. 고객들은 한 번에 하나씩 주문하기 위해 줄을 서 있습니다. 각 고객은 레모네이드를 한 개만 구입하고 5달러, 10달러, 20달러 지폐로 지불합니다. 순거래가 고객이 5달러를 지불하도록 각 고객에게 올바른 거스름돈을 제공해야 합니다.
처음에는 수중에 변화가 없습니다.
청구서[i]가 고객이 지불하는 청구서인 정수 배열이 주어지면 모든 고객에게 올바른 거스름돈을 제공할 수 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
예시
Example 1:
Input: bills = [5,5,5,10,20]
Output: true
Explanation:
From the first 3 customers, we collect three $5 bills in order.
From the fourth customer, we collect a $10 bill and give back a $5.
From the fifth customer, we give a $10 bill and a $5 bill.
Since all customers got correct change, we output true.
Example 2:
Input: bills = [5,5,10,10,20]
Output: false
Explanation:
From the first two customers in order, we collect two $5 bills.
For the next two customers in order, we collect a $10 bill and give back a $5 bill.
For the last customer, we can not give the change of $15 back because we only have two $10 bills.
Since not every customer received the correct change, the answer is false.
제약 조건
Constraints:
- 1 <= bills.length <= 105
- bills[i] is either 5, 10, or 20.
해결 과정
five와 ten 변수를 생성하여, 5달러와 10달러의 개수를 센다.
for문을 돌면서 bills 배열을 순회한다.
- bill이 5라면 five 변수를 1 증가시킨다.
- bill이 10이라면 ten 변수를 1 증가시키고 five를 1 감소시킨다. 이때 five가 0이라면 false를 return 한다.
- bill이 20이라면 ten 1 five 1, five 3 두 가지의 경우의 수를 생각한다.
- ten이 0 보다 크다면 첫번째 경우를 생각하고, 그렇지 않을 경우 두 번째 경우를 생각한다.
순회가 끝날 때까지 return false에 들지 않았다면 return true를 한다.
해결 코드
/**
* @param {number[]} bills
* @return {boolean}
*/
var lemonadeChange = function (bills) {
let five =0, ten = 0;
for (let bill of bills){
if (bill === 5) five++;
else if (bill === 10) {
ten++;
if (five === 0) return false;
else five--;
}else { // 20 bill;
let change = 15;
if (ten>0) {
ten--;
change -= 10;
}
while(change>0){
five--;
if(five<0) return false;
change -= 5;
}
}
}
return true;
};
'leetCode' 카테고리의 다른 글
[Medium] 155. Min Stack (0) | 2022.07.27 |
---|---|
[Medium] 1845. Seat Reservation Manager (0) | 2022.07.26 |
[Medium] 2. Add Two Numbers (0) | 2022.07.19 |
[Medium] 138. Copy List with Random Pointer (0) | 2022.07.19 |
[Medium] 143. Reorder List (0) | 2022.07.19 |
Comment