|
| 1 | +""" |
| 2 | +121. Best Time to Buy and Sell Stock |
| 3 | +https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ |
| 4 | +
|
| 5 | +λ¬Έμ : μ£Όμ κ°κ²© λ°°μ΄μ΄ μ£Όμ΄μ§ λ, ν λ² μ¬κ³ ν λ² νμμ μ»μ μ μλ μ΅λ μ΄μ΅μ ꡬνλΌ. |
| 6 | + (λ§€μλ λ§€λλ³΄λ€ μμ λ μ§μ¬μΌ ν¨) |
| 7 | +
|
| 8 | +μμ: |
| 9 | + Input: prices = [7, 1, 5, 3, 6, 4] |
| 10 | + Output: 5 (1μΌμ μ¬μ 4μΌμ νλ©΄ 6-1=5) |
| 11 | +""" |
| 12 | + |
| 13 | +from typing import List |
| 14 | + |
| 15 | + |
| 16 | +# ============================================================================= |
| 17 | +# νμ΄ 1: λΈλ£¨νΈ ν¬μ€ (Brute Force) |
| 18 | +# ============================================================================= |
| 19 | +# μμ΄λμ΄: λͺ¨λ (λ§€μμΌ, λ§€λμΌ) μ‘°ν©μ νμΈνμ¬ μ΅λ μ΄μ΅μ μ°Ύλλ€. |
| 20 | +# μκ° λ³΅μ‘λ: O(nΒ²) - μ΄μ€ λ°λ³΅λ¬Έ |
| 21 | +# κ³΅κ° λ³΅μ‘λ: O(1) |
| 22 | +# κ²°κ³Ό: Time Limit Exceeded (μκ° μ΄κ³Ό) |
| 23 | +# ============================================================================= |
| 24 | +class Solution: |
| 25 | + def maxProfit(self, prices: List[int]) -> int: |
| 26 | + result = 0 |
| 27 | + |
| 28 | + # i: λ§€μμΌ (0 ~ n-2) |
| 29 | + for i in range(len(prices) - 1): |
| 30 | + # r: λ§€λμΌ (i+1 ~ n-1), λ§€μμΌ μ΄νμ¬μΌ ν¨ |
| 31 | + for r in range(i + 1, len(prices)): |
| 32 | + # νμ¬ μ‘°ν©μ μ΄μ΅ = λ§€λκ° - λ§€μκ° |
| 33 | + profit = prices[r] - prices[i] |
| 34 | + result = max(result, profit) |
| 35 | + |
| 36 | + return result |
| 37 | + |
| 38 | + |
| 39 | +# ============================================================================= |
| 40 | +# νμ΄ 2: ν λ² μν (One Pass) - μ΅μ ν |
| 41 | +# ============================================================================= |
| 42 | +# μμ΄λμ΄: λ°°μ΄μ μννλ©΄μ "μ§κΈκΉμ§μ μ΅μ λ§€μκ°"λ₯Ό μΆμ νλ€. |
| 43 | +# κ° λ μ§μμ νμ¬ κ°κ²©μΌλ‘ νμμ λμ μ΄μ΅μ κ³μ°νκ³ μ΅λκ°μ κ°±μ νλ€. |
| 44 | +# |
| 45 | +# ν΅μ¬ ν΅μ°°: |
| 46 | +# - νΉμ λ μ§μ ν λ μ΅λ μ΄μ΅ = νμ¬κ°κ²© - (μ΄μ κΉμ§μ μ΅μκ°κ²©) |
| 47 | +# - λ°λΌμ μ΅μ κ°κ²©λ§ μΆμ νλ©΄ O(n)μ ν΄κ²° κ°λ₯ |
| 48 | +# |
| 49 | +# μκ° λ³΅μ‘λ: O(n) - ν λ² μν |
| 50 | +# κ³΅κ° λ³΅μ‘λ: O(1) |
| 51 | +# ============================================================================= |
| 52 | +class Solution: |
| 53 | + def maxProfit(self, prices: List[int]) -> int: |
| 54 | + max_profit = 0 # μ΅λ μ΄μ΅ |
| 55 | + min_price = prices[0] # μ§κΈκΉμ§μ μ΅μ λ§€μκ° |
| 56 | + |
| 57 | + # 1μΌμ°¨λΆν° μν (0μΌμ°¨λ min_price μ΄κΈ°κ°) |
| 58 | + for price in prices[1:]: |
| 59 | + # μ€λ νμμ λμ μ΄μ΅ κ³μ° |
| 60 | + profit = price - min_price |
| 61 | + # μ΅λ μ΄μ΅ κ°±μ |
| 62 | + max_profit = max(max_profit, profit) |
| 63 | + # μ΅μ λ§€μκ° κ°±μ (λ μΌ λ μ΄ μμΌλ©΄ μ
λ°μ΄νΈ) |
| 64 | + min_price = min(min_price, price) |
| 65 | + |
| 66 | + return max_profit |
| 67 | + |
| 68 | + |
0 commit comments