본문 바로가기
카테고리 없음

[LeetCode] 2944. Minimum Number of Coins for Fruits

by 헤이즐넛 좋아하는 개발자 2025. 1. 27.

I. Description


II. Code

class Solution:
    def minimumCoins(self, prices: List[int]) -> int:
        # 변수 초기화
        n = len(prices)
        dp = [0] * (n+1) # dp[i]: i번째 날까지의 최소 가격
        q = deque() # 다음 dp 계산 시 고려해야 할 인덱스
        
        for i in range(n):
            # 해당 dp가 free로 받을 수 있는 경우를 벗어나면 고려할 인덱스 리스트에서 삭제
            while q and (q[0] + 1) * 2 < i + 1:
                q.popleft()
            # 현재 dp가 최소 가격이 되도록 하는 인덱스 리스트에서 불필요한 인덱스 삭제
            while q and dp[q[-1]] + prices[q[-1]] >= dp[i] + prices[i]:
                q.pop()
            q.append(i)
            dp[i + 1] = dp[q[0]] + prices[q[0]]
        
        return dp[n]

Dynamic programming 방식을 연습할 수 있는 문제였다. 과정을 순서대로 써보면서 계산했다.