This is the solution for the HackerRank Greedy Florist problem, in python. This is a problem in the Interview Preparation Kit > Greedy Algorithms and is considered medium.
The problem is as follows:
- The greedy florist wants to maximize his price
- He has a formula to the price: (n + 1) * original price
- n is the number of flowers previously purchased
So, if you buy one flower, it will be the original price. If you buy a second flower, the price is 2 * original price.
I think that the problem never left clear that the expensive flowers must be purchased first, but that's in the answer.
Solution
The first problem we must solve is to put the array in a reverse price order.
c.sort()
c.reverse()
So we can traverse it and buy the flowers. For each item, we must find:
- n
- current cost
We can find n
by integer (or floor) dividing the array position with the number of friends k
for i in range(len(c)):
n = i // k
So, the first round of purchases will have n = 0, the second, n = 1, and so on.
The cost is straight to the formula:
flower_cost = c[i]
cost = (n + 1) * flower_cost
And that's it. The complete solution is as follow:
def getMinimumCost(k, c):
total = 0
c.sort()
c.reverse()
for i in range(len(c)):
n = i//k
flower_cost = c[i]
cost = (n + 1) * flower_cost
total += cost
return total
Top comments (0)