สมมติว่ามีร้านขายน้ำมะนาว ราคาแก้วละ 5 ดอลลาร์ ลูกค้าสิบคิวซื้อทีละคน คนละหนึ่งแก้ว จ่ายด้วยธนบัตร 5, 10 หรือ 20 ดอลลาร์ เราต้องให้เงินทอนถูกต้องให้ทุกคน โดยเริ่มต้นไม่มีเงินทอนเลย ตรวจสอบว่าเราสามารถให้เงินทอนถูกต้องได้ทุกคนหรือไม่
ตัวอย่าง
อินพุต [5,5,5,10,20] → ผลลัพธ์ True เพราะ ลูกค้า 3 คนแรกจ่าย 5 ดอลลาร์ ได้ธนบัตร 5 สามใบ คนที่ 4 จ่าย 10 ให้ทอน 5 คนที่ 5 จ่าย 20 ให้ทอน 10+5 ทุกคนได้ทอนครบ
ขั้นตอนการแก้ปัญหา
- นับจำนวนธนบัตรแต่ละประเภท:
n5, n10, n20 - วนลูปผ่านแต่ละบิล:
- ถ้าเป็น 5: เพิ่ม
n5 - ถ้าเป็น 10: เพิ่ม
n10, ต้องมีn5 > 0เพื่อให้ทอน 5 (ลดn5) - ถ้าเป็น 20: ให้ทอน 15 ดอลลาร์ โดย優先ใช้ 10+5 (ลด
n10,n5) ถ้าไม่มี 10 ให้ใช้ 5 สามใบ (ต้องมีn5 >= 3) - ถ้าให้ทอนไม่ได้ → คืน
False
- ถ้าเป็น 5: เพิ่ม
- จบลูป → คืน
True
การติดตั้งใน Python
class Solution:
def lemonadeChange(self, bills):
n5 = n10 = n20 = 0
for bill in bills:
if bill == 5:
n5 += 1
elif bill == 10:
if n5 == 0:
return False
n10 += 1
n5 -= 1
else: # bill == 20
if n10 > 0 and n5 > 0:
n10 -= 1
n5 -= 1
elif n5 >= 3:
n5 -= 3
else:
return False
return True
ob = Solution()
print(ob.lemonadeChange([5,5,5,10,20])) # True
อินพุต / เอาต์พุต
Input: [5,5,5,10,20] Output: True