Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources
Lemonade Change

Lemonade Change

Problem Statement

You’re running a lemonade stand where each lemonade costs $5. Customers pay with $5, $10, or $20 bills, and you must provide correct change. Given an array of bills, determine if you can make change for every customer. This easy-level greedy problem tests your cash-handling skills—keep the change flowing!

Example

Input: bills = [5, 5, 5, 10, 20]

Output: true (5s for $10, $10+$5 for $20)

Input: bills = [5, 5, 10, 10, 20]

Output: false (not enough $5s for second $10)

Code

Java
Python
JavaScript
public class Solution {
    public boolean lemonadeChange(int[] bills) {
        int five = 0, 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;
    }
}
            
def lemonade_change(bills):
    five = 0
    ten = 0
    for bill in bills:
        if bill == 5:
            five += 1
        elif bill == 10:
            if five == 0:
                return False
            five -= 1
            ten += 1
        else:
            if ten > 0 and five > 0:
                ten -= 1
                five -= 1
            elif five >= 3:
                five -= 3
            else:
                return False
    return True
            
function lemonadeChange(bills) {
    let five = 0, ten = 0;
    for (let bill of 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;
}
            

Explanation

  • Greedy Choice: Use $10+$5 or 3×$5 for $20, prioritizing $10 when possible.
  • Flow: Track $5 and $10 bills, fail if change can’t be made.
  • Example: [5,5,5,10,20] → 3 $5s, use 1 for $10, use $10+$5 for $20.

Note

Time complexity: O(n), Space complexity: O(1). Keep the change simple!