- Reference
- ์๊ฐ๋ณต์ก๋: $O(N)$
- Runtime
1122ms
- Beats
36.62%
Solution
from typing import List
class Solution:
# prices[i] -> i๋ฒ์งธ ๋ ์ ์ฃผ์์ ๊ฐ๊ฒฉ
# ์ด๋ ํ๋ฃจ์ ์ฃผ์์ ์ด ์ ์๊ณ , "๊ทธ ํ" ๋ค๋ฅธ ๋ ์ ์ฃผ์์ ํ ์ ์์.
# ์คํ ๊ฐ๋ฅํ ๊ฐ์ฅ ํฐ ์ด์ต (return the maximum profit) ๊ตฌํ์! -> ์ด๋ค ์ด์ต๋ ์์ ๊ฒฝ์ฐ 0 ๋ฆฌํด
# O(n)
# ์ฃผ์์ด ๊ฐ์ฅ ์ ๋ ดํ์ ๋๋ฅผ ์๊ฐํ์ -> ๊ฐ ์์ ์์์ ์ต๋ ์ด์ต ๊ตฌํ ์ ์์
def maxProfit(self, prices: List[int]) -> int:
# ์ต๋ ์ด์ต -> ์ด๋ค ์ด์ต์ด ์์ ๊ฒฝ์ฐ 0์ ๋ฆฌํดํ๋ ์ด๊ธฐ๊ฐ 0์ผ๋ก ์ธํ
max_profit = 0
# ๊ณผ๊ฑฐ์ "์ต์ ์ฃผ๊ฐ" -> ์ด๊ธฐ๊ฐ์ผ๋ก ์ฒซ๋ฒ์งธ ์์ ์ธํ
min_price = prices[0]
# prices: i๋ฒ์งธ์ ์ฃผ์์ ๊ฐ๊ฒฉ ๋ฐฐ์ด -> price: ๊ทธ ์ฃผ์์ ๊ฐ๊ฒฉ
for price in prices:
# ํ์ฌ ์ป์ ์ ์๋ ๊ทธ ์์ ์์์ ์ต๋ ์ด์ต ๊ณ์ ๊ฐฑ์
# price์์ min_price๋ฅผ ๋นผ์ฃผ๋ ์ด์ ๋
# ์ต๋ ์ด์ต์ ํ์ฌ ์ฃผ๊ฐ์์ ๊ณผ๊ฑฐ์ ์ต์ ์ฃผ๊ฐ๋ฅผ ๊ทธ๋ฅ ๋นผ์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ
# ํ์ฌ ์ฃผ๊ฐ์์ ๊ณผ๊ฑฐ์ ์ต์ ์ฃผ๊ฐ๋ฅผ ๋นผ์ค ๊ฐ์์ ๋ ๊ฐ์ฅ ํฐ ๊ฐ์ด ์ต๋ ์ด์ต ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ด ๋จ
max_profit = max(price - min_price, max_profit)
# prices์ ์ต์๊ฐ ๊ณ์ ๊ฐฑ์
min_price = min(price, min_price)
return max_profit
# O(n^2) -> Time Limit Exceeded๋ก ์คํจ
# ๊ฐ๋ฅํ ๋ฐฐ์ด ๋ชจ๋ ์์์์ ์ฃผ์ buy and sell
# def maxProfit(self, prices: List[int]) -> int:
# # ์ด๋ค ์ด์ต์ด ์์ ๊ฒฝ์ฐ 0์ ๋ฆฌํดํ๋ ์ด๊ธฐ๊ฐ 0์ผ๋ก ์ธํ
# max_profit = 0
#
# # len(prices) - 1: ์ฃผ์์ ์ฌ๋ ๊ฒ์ ๋ง์ง๋ง์์ ๋ฐ๋ก ์๊น์ง
# for buy_stock in range(len(prices) - 1):
# # ์ฃผ์์ ํ๋ ๊ฒ์ ์ฐ ์์ ์์ ํ์นธ ๋ค๋ถํฐ ๋ง์ง๋ง๊น์ง
# for sell_stock in range(buy_stock + 1, len(prices)):
# # ํ์ฌ ์ด์ต (sell์ ์ฃผ์ ๊ฐ - buy์ ์ฃผ์ ๊ฐ)
# profit = prices[sell_stock] - prices[buy_stock]
# max_profit = max(profit, max_profit)
#
# return max_profit
Leave a comment