Pythonでのレモネードの変更
レモネードスタンドがあるとすると、各レモネードの価格は5ドルです。現在、顧客は店から購入し、一度に1つずつ注文するために列に並んでいます。
各顧客はレモネードを1つだけ購入し、5ドル、10ドル、または20ドルの請求書で支払うことができます。正味のトランザクションが顧客が$5を支払うことになるように、各顧客に正しい変更を提供する必要があります。そして最初は、手に変化はありません。
すべてのお客様に正しい変更を提供できるかどうかを確認する必要があります。
したがって、入力が[5,5,5,10,20]の場合、出力はTrueになります。最初の3人の顧客から、3つの$5の請求書を順番に受け取ることができます。 4つ目から、10ドルの請求書を集め、5ドルを返します。その後、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を返す
- iが5と同じ場合、
- 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
-
コイン交換のためのPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − N枚のコインが与えられ、Sに各値が無限に供給されるように、それらのコインを変更したいと考えています。順序に関係なく、変更できる方法がいくつあるかを表示する必要があります。 動的計画法の概念を使用して問題ステートメントを解決し、時間の複雑さを軽減します。 次に、以下の実装のソリューションを見てみましょう- 例 # dynamic approach def count(S, m, n): # base case table = [[0 for x in
-
Pythonのissuperset()
この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',