easy/dp 121 성공

This commit is contained in:
2026-07-13 15:29:48 +09:00
parent 4947d9ccca
commit 12c3ee7ab9

23
easy/dp/121.py Normal file
View File

@@ -0,0 +1,23 @@
# Best Time to Buy and Sell Stock
class Solution:
def maxProfit(self, prices: list[int]) -> int:
dp = [0] * len(prices)
max_price = prices[-1]
for i in range(len(prices)-2, -1, -1):
dp[i] = max_price - prices[i]
max_price = max(max_price, prices[i])
return max(dp)
"""
걸린 시간: 15분
복잡도: n길이의 dp 테이블을 뒤에서부터 한번만 순회하면서 채우기 때문에 시간복잡도는 O(n)이다.
n길이의 dp 테이블을 만들기 때문에 공간복잡도도 O(n)이다.
해설: 산 것은 미래에만 팔 수 있기 때문에 미래가 없는 것부터 미래를 하나씩 늘려가면서 미래의 최대 값과 수익의 최대값을 갱신하면 되겠다고 생각했다.
dp[i]는 i번째 날에 사는 경우 얻을 수 있는 이익의 최대값이다. i번째 날에 샀을 때는 지금까지 오면서 price가 가장 컸던 날에 팔면 된다.
사실 전체 날짜에 대한 정보 기록 없이 뒤에서 앞으로 가면서 지금까지의 최대 price와 profit만 기억해두면 공간복잡도를 O(1)로 줄일 수 있다.
"""