मान लीजिए एक लेमनेड स्टैंड है, जहां प्रत्येक लेमनेड की कीमत $5 है। ग्राहक कतार में खड़े हैं और एक-एक करके खरीदते हैं।
प्रत्येक ग्राहक केवल एक लेमनेड खरीद सकता है और $5, $10, या $20 के नोट से भुगतान करता है। हमें प्रत्येक ग्राहक को सही बदलाव देना होगा ताकि शुद्ध लेनदेन $5 का हो। शुरुआत में हमारे पास कोई बदलाव नहीं होता।
हमें जांचना है कि क्या हम हर ग्राहक को सही बदलाव दे सकते हैं।
उदाहरण के लिए, यदि इनपुट [5,5,5,10,20] है, तो आउटपुट True होगा, क्योंकि पहले 3 ग्राहकों से हमें तीन $5 के नोट मिलते हैं। चौथे ग्राहक से हम $10 लेते हैं और $5 वापस करते हैं। पांचवें ग्राहक को हम $10 और $5 का बदलाव देते हैं। चूंकि सभी ग्राहकों को सही बदलाव मिला, आउटपुट True है।
हल करने के चरण
- n5 := 0, n10 := 0, n20 := 0
- बिल्स में प्रत्येक i के लिए:
- यदि i 5 के बराबर है, तो n5 := n5 + 1
- अन्यथा यदि i 10 के बराबर है, तो n10 := n10 + 1
- अन्यथा n20 := n20 + 1
- यदि बिल्स का आकार > 0 और n5 0 के बराबर है, तो False वापस करें
- यदि i 20 के बराबर है और n10 > 0 और n5 > 0, तो:
- n10 := n10 - 1
- n5 := n5 - 1
- अन्यथा जब i 20 के बराबर है और n10 0 के बराबर है और n5 < 3, तो False वापस करें
- अन्यथा जब i 20 के बराबर है और n10 0 के बराबर है और n5 >= 3, तो:
- n5 := n5 - 3
- यदि i 10 के बराबर है और n5 > 0, तो n5 := n5 - 1
- अन्यथा जब i 10 के बराबर है और n5 0 के बराबर है, तो False वापस करें
- True वापस करें
उदाहरण
class Solution:
def lemonadeChange(self, bills):
n5 = 0
n10 = 0
n20 = 0
for i in bills:
if i == 5:
n5 += 1
elif i == 10:
n10 += 1
else:
n20 += 1
if len(bills) > 0 and n5 == 0:
return False
if i == 20 and n10 > 0 and n5 > 0:
n10 -= 1
n5 -= 1
elif i == 20 and n10 == 0 and n5 < 3:
return False
elif i == 20 and n10 == 0 and n5 >= 3:
n5 = n5 - 3
if i == 10 and n5 > 0:
n5 -= 1
elif i == 10 and n5 == 0:
return False
return True
ob = Solution()
print(ob.lemonadeChange([5,5,5,10,20]))
इनपुट
[5,5,5,10,20]
आउटपुट
True