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.

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.

난이도: easy

bills = 손님들이 내는 돈의 순서
순서대로 레모네이드를 판매하는데 거스름돈을 지불하지 못하는 경우 false를 리턴
정상적으로 판매 가능하다면 true 리턴

거스름돈을 낼 수 있는 모든 경우의 수를 확인하면 되는 방식이고, 거스름돈이 큰 순서부터 내보내면 된다
Greedy 알고리즘이며, 경험상 거스름돈을 내는 문제는 대부분이 Greedy로 풀이 했었다

var lemonadeChange = function(bills) {
  let five = 0;
  let ten = 0;

  for (let i = 0; i < bills.length; i++) {
    const bill = bills[i];
    // 20일 경우
    if (bill === 20) {
      if (ten !== 0) {
        ten--;
        five--;
        if (five < 0) {
          return false
        }
      } else {
        five -= 3;
        if (five < 0) {
          return false
        }
      }
    }

    // 10일 경우 
    if (bill === 10) {
      ten++;
      five--;
      if (five < 0) {
        return false;
      }
    }

    // 5일 경우
    if (bill === 5) {
      five++
    }
  }
  return true
};

반응형

+ Recent posts