๋ณธ ๊ธ์ LeetCode Top Interview 150์ ์ ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์์ฝํ๊ณ ์ด์ ๋ํ ๊ฐ์ธ์ ์ธ ํ์ด๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
๋ณธ ํฌ์คํ ์๋ฆฌ์ฆ๋ 150 list์ ์์๋ฅผ ๋ฐ๋ผ์ ๊ฒ์ฌ๋ฉ๋๋ค. ํ์ด ์ธ์ด๋ python์ ์ฌ์ฉํฉ๋๋ค.
๋์ด๋: EASY
ํค์๋: Array
๋ฌธ์
๋ฌธ์ ์๋ฌธ: https://leetcode.com/problems/best-time-to-buy-and-sell-stock/?envType=study-plan-v2&envId=top-interview-150
prices๋ผ๋ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค๊ณ ํ์. ์ด ๋ฐฐ์ด์ i๋ฒ์งธ ์์๋ค์ ์ฃผ์์ ๊ฐ๊ฒฉ์ ์๋ฏธํ๋ค. ์ด ๋ ์ฌ๋ฌ๋ถ์ ์ฃผ์์ ์ฌ๋ ๋ ๊ณผ ํ๋ ๋ ์ ์ ํ๋ ค๊ณ ํ๋ค. ๊ฐ๋ฅํ ๊ฑฐ๋ ๊ฒฝ์ฐ์ ์ ์ค ์ต๋ ์ด์ค ๊ฐ์ ๋ฐํํ๋ผ. (๋๋ฌด ๋น์ฐํ๊ฒ๋ ๋งค๋๋ ๋งค์ ์ดํ์ ์ด๋ฃจ์ด์ ธ์ผํ๋ค.) ์ด์ค์ ๋ผ ์ ์๋ ๊ฒฝ์ฐ 0์ ๋ฐํํด๋ผ.
ํ์ด
(Runtime: beats 99.83% of users with Python 3, Memory: beats 19.17 % of users with Python 3)
ํ์ด ์ ๋ ์ฌ๊ณ ์ ํ๋ฆ
max ๊ฐ๊ณผ min ๊ฐ์ ๊ฐ๊ฐ O(N)์ผ๋ก ๊ตฌํ ์ ์์ผ๋ฉด ์ด ๋ ๊ฐ์ด min ๊ฐ์ด ์์์๊ณ max ๊ฐ์ด ๋ค์ ์๋ค๋ฉด ์ด ๋์ ์ฐจ๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํ ์ ์์๊ฑฐ๋ค. ํ์ง๋ง ์ด๊ฒ ๋ณด์ฅ๋ ๋์ง ์์ ๋ฟ๋๋ฌ max์ min์ ๊ฐ๊ฐ O(N)์ด๋๊น (O(2N)์ด๋๊น ์ค์ ์ํ์๊ฐ์์ ์ํด) ์ด ๋์ ํ๋ฒ์ ์ฐพ๋ ๋ฐฉํฅ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
๋ ๊ฐ์ ๊ฐ์ ์ ์งํ๋ฉด์ ์ ์ฒด ๋ฐฐ์ด์ ์ํํ์. i๋ฒ์งธ ๊ฐ์ด min_val๋ณด๋ค ์์ผ๋ฉด min_val์ ์ ๋ฐ์ดํธํ๊ณ i๋ฒ์งธ ๊ฐ์ด max_val๋ณด๋ค ํฌ๋ฉด max_val์ ์ ๋ฐ์ดํธํ์. max_val์ ์ ๋ฐ์ดํธํ ๋๋ max_val์ ๋ณ๋๋ก ์ ๋ฐ์ดํธํ ํ์๊ฐ ์์ง๋ง min_val์ ์ ๋ฐ์ดํธํ ๋๋ max_val๋ ์๋์ผ๋ก ๋ง๋ค์ด์ผํ๋ค. ๋ฐ๋ผ์, ์ง๊ธ๊น์ง ๊ฐ์ง๊ณ ์๋ max_val๊ณผ min_val์ ์ฐจ๋ฅผ ans๊ฐ์ ์ ๋ฐ์ดํธ ํ ํ max_val์ ํ์ฌ์ min_val๋ก ์ ๋ฐ์ดํธํด์ฃผ๋ ํํ๋ก ์ ์ฒด ๋ฐฐ์ด์ ์ํํ์.
ํ์ด ๊ตฌํ
class Solution:
def maxProfit(self, prices: List[int]) -> int:
min_val = max_val = prices[0]
ans = 0
for price in prices:
if price < min_val:
ans = max(ans, max_val - min_val)
max_val = min_val = price
elif price > max_val:
max_val = price
return max(ans, max_val - min_val)
์๊ฐ ๋ณต์ก๋๋ O(N), ๊ณต๊ฐ ๋ณต์ก๋๋ O(1)
Takeaway
๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ๋ฒ ์ค์ ํ๋๋ก, ์ด ๋ฌธ์ ๋ DP ๋ฌธ์ ๋ก ํ ์ ์๋ค. ๊ทผ๋ฐ ๋ฌธ์ ํน์ฑ๋ง์ ๋ถ์ํด์ ํ์ด์ ๋ค๋ฅธ overhead ์์ด ๋ ๋น ๋ฅธ ์ํ์๊ฐ์ผ๋ก ๋ฌธ์ ํด๊ฒฐํ ์ ์๋ค.
'IN DEPTH CAKE > Supercoder' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ฉ/LeetCode150-(9)] 55. Jump Game (13) | 2023.08.22 |
---|---|
[์ฝ๋ฉ/LeetCode150-(8)] Best Time to Buy and Sell Stock II (122) (0) | 2023.08.22 |
[์ฝ๋ฉ/LeetCode150-(6)] Rotate Array (189) (0) | 2023.08.20 |
[์ฝ๋ฉ/LeetCode150-(5)] Majority Element (169) (2) | 2023.08.18 |
[์ฝ๋ฉ/LeetCode150-(4)] Remove Duplicates from Sorted Array II(80) (2) | 2023.08.18 |