-
Notifications
You must be signed in to change notification settings - Fork 26
/
1357.ApplyDiscountEverynOrders.py
91 lines (80 loc) · 4.29 KB
/
1357.ApplyDiscountEverynOrders.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
"""
There is a sale in a supermarket, there will be a discount every n customer.
There are some products in the supermarket where the id of the i-th product
is products[i] and the price per unit of this product is prices[i].
The system will count the number of customers and when the n-th customer
arrive he/she will have a discount on the bill. (i.e if the cost is x the
new cost is x - (discount * x) / 100). Then the system will start counting
customers again.
The customer orders a certain amount of each product where product[i] is
the id of the i-th product the customer ordered and amount[i] is the number
of units the customer ordered of that product.
Implement the Cashier class:
- Cashier(int n, int discount, int[] products, int[] prices) Initializes
the object with n, the discount, the products and their prices.
- double getBill(int[] product, int[] amount) returns the value of the
bill and apply the discount if needed. Answers within 10^-5 of the
actual value will be accepted as correct.
Example:
Input:
["Cashier","getBill","getBill","getBill","getBill","getBill","getBill","getBill"]
[[3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]],[[1,2],[1,2]],[[3,7],
[10,10]],[[1,2,3,4,5,6,7],[1,1,1,1,1,1,1]],[[4],[10]],[[7,3],[10,10]],
[[7,5,3,1,6,4,2],[10,10,10,9,9,9,7]],[[2,3,5],[5,3,2]]]
Output:
[null,500.0,4000.0,800.0,4000.0,4000.0,7350.0,2500.0]
Explanation:
Cashier cashier = new Cashier(3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]);
cashier.getBill([1,2],[1,2]); // return 500.0,
// bill = 1 * 100 + 2 * 200 = 500.
cashier.getBill([3,7],[10,10]); // return 4000.0
cashier.getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]); // return 800.0, The bill was 1600.0 but as this is the third customer,
// he has a discount of 50% which means his bill is only
// 1600 - 1600 * (50 / 100) = 800.
cashier.getBill([4],[10]); // return 4000.0
cashier.getBill([7,3],[10,10]); // return 4000.0
cashier.getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]); // return 7350.0,
// Bill was 14700.0 but as the system counted three more customers, he
// will have a 50% discount and the bill becomes 7350.0
cashier.getBill([2,3,5],[5,3,2]); // return 2500.0
Constraints:
- 1 <= n <= 10^4
- 0 <= discount <= 100
- 1 <= products.length <= 200
- 1 <= products[i] <= 200
- There are not repeated elements in the array products.
- prices.length == products.length
- 1 <= prices[i] <= 1000
- 1 <= product.length <= products.length
- product[i] exists in products.
- amount.length == product.length
- 1 <= amount[i] <= 1000
- At most 1000 calls will be made to getBill.
- Answers within 10^-5 of the actual value will be accepted as correct.
"""
#Difficulty: Medium
#25 / 25 test cases passed.
#Runtime: 780 ms
#Memory Usage: 21 MB
#Runtime: 780 ms, faster than 81.36% of Python3 online submissions for Apply Discount Every n Orders.
#Memory Usage: 21 MB, less than 90.91% of Python3 online submissions for Apply Discount Every n Orders.
class Cashier:
def __init__(self, n: int, discount: int, products: List[int], prices: List[int]):
self.count = 0
self.n = n
self.discount = discount
self.products = {}
for i in range(len(products)):
self.products[products[i]] = prices[i]
def getBill(self, product: List[int], amount: List[int]) -> float:
bill = 0
self.count += 1
for i in range(len(product)):
bill += amount[i] * self.products[product[i]]
if self.count == self.n:
self.count = 0
bill -= bill * self.discount / 100
return bill
# Your Cashier object will be instantiated and called as such:
# obj = Cashier(n, discount, products, prices)
# param_1 = obj.getBill(product,amount)