easy/dp 121 성공
This commit is contained in:
23
easy/dp/121.py
Normal file
23
easy/dp/121.py
Normal 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)로 줄일 수 있다.
|
||||
"""
|
||||
Reference in New Issue
Block a user