Leetcode - Best Time to Buy and Sell Stock
์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ
๋ฌธ์ ๋ ํด์ํ๋ฉด ๊ฐ์ฅ ์์ต์ ๋ง์ด ๋ผ ์ ์๋๋ก ์ ์ ์ ๋งค์, ๊ณ ์ ์ ๋งค๋ ํ ์ป๋ ์์ต์ ๋ฆฌํดํ๋ ๊ฒ์ด๋ค.
๐จ Naive Solution
๋ฑ ๋ ์ค๋ฅด๋ ์์ด๋์ด๋ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ๋ชจ๋ ๋ ์ ๊ฐ๊ฒฉ์ ์กฐํํ๋ฉด์ ๊ฐ์ฅ ์ ์ ์ด์๋ ๋ ์ ๋นผ ๋๊ฐ๋ ๊ฒ์ด๋ค. ์ฝ๋๋ก ๋ณด์
class Solution:
def maxProfit(self, prices: List[int]) -> int:
"""
๊ฐ์ฅ ์์ต์ ๋ง์ด ์ป์ ์ ์๋๋ก ์ ์ ์ ๋งค์, ๊ณ ์ ์ ๋งค๋
๋งค์์ ๋งค๋๋ ์๋ก ๋ค๋ฅธ ๋
"""
min_price = max(prices)
days = len(prices)
dp = [min_price for _ in range(days)]
for day in range(days):
if prices[day] < min_price:
min_price = prices[day]
dp[day] = prices[day] - min_price
return max(dp)
TC : O(N)
SC : O(N)
dp ๋ฆฌ์คํธ๋ฅผ ์ฐ๋ฉด์ ๊ฐ์ฅ ์์ต์ ๋ง์ด ๋ผ ์ ์๋๋ก ๊ตฌํ๊ณ ์๋ค. ์ด๋ ๊ณต๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ ํ ์ ์์๊น?
๐ฎ Best Solution
์ ์ฝ๋๋ฅผ ๋ณด๋ค๋ณด๋ฉด ๊ตณ์ด dp ๋ฆฌ์คํธ๊ฐ ํ์์์ด ๋ณด์ธ๋ค. ๊ทธ ์ด์ ๋ ํ ๋ฒ ๋ณธ prices๋ ๋ ์ด์ ์ฐ์ด์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ์ง๋ณด์.
class Solution:
def maxProfit(self, prices: List[int]) -> int:
"""
๊ฐ์ฅ ์์ต์ ๋ง์ด ์ป์ ์ ์๋๋ก ์ ์ ์ ๋งค์, ๊ณ ์ ์ ๋งค๋
๋งค์์ ๋งค๋๋ ์๋ก ๋ค๋ฅธ ๋
"""
min_price = max(prices)
days = len(prices)
for day in range(days):
if prices[day] < min_price:
min_price = prices[day]
prices[day] -= min_price
return max(prices)
TC : O(N)
SC : O(1)
Easy ๋์ด๋์์ผ๋ฉฐ ๊ต์ฅํ ๋นจ๋ฆฌ ํ ์ ์์๋ค. ์๋๋ ๊ทธ ๊ฒฐ๊ณผ์ด๋ค.