|
| 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