문제

해결방법
남아있는 재고가 정상적으로 돌아오는 날 까지 재고가 1이라도 남아있어야 하고, 또한 재료를 사오는 날까지도 남은 재고가 있어야 하므로 그 조건 문을 걸어준 후 많은 재고를 찾기 위해 값들을 힙에 넣어준다.
-> 음수로 값을 넣어주면 max힙으로 구현할 수 있다
그 후 인덱스를 1 증가시켜주고, 재료를 사온 횟수도 하나 더한 후, 힙에서 가장 큰 재고를 꺼내 남아있는 재고에 더해준 후 재료를 사온 횟수를 리턴해주면 값을 구할 수 있다.
import heapq
ramen_stock = 4
supply_dates = [4, 10, 15]
supply_supplies = [20, 5, 10]
supply_recover_k = 30
def get_minimum_count_of_overseas_supply(stock, dates, supplies, k):
max_heap = []
answer = 0
last_added_index = 0
while stock <= k:
while last_added_index < len(dates) and dates[last_added_index] <= stock:
heapq.heappush(max_heap, -supplies[last_added_index])
last_added_index += 1
answer += 1
heappop = heapq.heappop(max_heap)
stock += - heappop
return answer
print(get_minimum_count_of_overseas_supply(ramen_stock, supply_dates, supply_supplies, supply_recover_k))
print("정답 = 2 / 현재 풀이 값 = ", get_minimum_count_of_overseas_supply(4, [4, 10, 15], [20, 5, 10], 30))
print("정답 = 4 / 현재 풀이 값 = ", get_minimum_count_of_overseas_supply(4, [4, 10, 15, 20], [20, 5, 10, 5], 40))
print("정답 = 1 / 현재 풀이 값 = ", get_minimum_count_of_overseas_supply(2, [1, 10], [10, 100], 11))