레모네이드 판매대가 있다고 가정하고 각 레모네이드의 가격은 $5입니다. 이제 고객들은 매장에서 물건을 구매하고 한 번에 하나씩 주문하기 위해 줄을 서 있습니다.
각 고객은 레모네이드를 하나만 사서 $5, $10 또는 $20 지폐로 지불할 수 있습니다. 고객이 $5를 지불하는 순 거래가 되도록 각 고객에게 정확한 변경 사항을 제공해야 합니다. 그리고 처음에는 잔고가 없습니다.
모든 고객에게 올바른 변경을 제공할 수 있는지 확인해야 합니다.
따라서 입력이 [5,5,5,10,20]과 같으면 출력은 True가 됩니다. 처음 3명의 고객으로부터 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과 같으면
- 거짓을 반환
- i가 20과 같고 n10> 0 및 n5> 0이면
- n10 :=n10 - 1
- n5 :=n5 - 1
- 그렇지 않고 i가 20과 같고 n10이 0이고 n5 <3일 때
- 거짓을 반환
- 그렇지 않고 i가 20과 같고 n10이 0이고 n5>=3일 때
- n5 :=n5 -3
- i가 10이고 n5> 0이면
- n5 :=n5 - 1
- 그렇지 않고 i가 10과 같고 n5가 0과 같을 때
- 거짓을 반환
- i가 5와 같으면
- 참 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
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