๋ณธ ๊ธ์ LeetCode Top Interview 150์ ์ ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์์ฝํ๊ณ ์ด์ ๋ํ ๊ฐ์ธ์ ์ธ ํ์ด๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
๋ณธ ํฌ์คํ ์๋ฆฌ์ฆ๋ 150 list์ ์์๋ฅผ ๋ฐ๋ผ์ ๊ฒ์ฌ๋ฉ๋๋ค. ํ์ด ์ธ์ด๋ python์ ์ฌ์ฉํฉ๋๋ค.
๋์ด๋: Medium
ํค์๋: Array, Greedy
๋ฌธ์
๋ฌธ์ ์๋ฌธ: https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/description/?envType=study-plan-v2&envId=top-interview-150
prices๋ผ๋ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค๊ณ ํ์. ์ด ๋ฐฐ์ด์ i๋ฒ์งธ ์์๋ค์ ์ฃผ์์ ๊ฐ๊ฒฉ์ ์๋ฏธํ๋ค. ํ ๋ฒ์ ํ๋์ ์ฃผ์๋ง ๊ฐ์ง๊ณ ์์ ์ ์๋ค. ๋จ, ์ฃผ์์ ํ์๋ง์ ๋น์ผ์ ๋ฐ๋ก ์ด ์ ์๋ค.
์ด๋ฌํ ์กฐ๊ฑด ํ์์ ์ต๋ ์์ต(profit)์ ์ฐพ์์ ๋ฐํํ๋ผ.
์์ ์ ๋ ฅ
Input: prices = [7,1,5,3,6,4]
Output: 7
Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4.
Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3 = 3.
Total profit is 4 + 3 = 7.
Input: prices = [1,2,3,4,5]
Output: 4
Explanation: Buy on day 1 (price = 1) and sell on day 5 (price = 5), profit = 5-1 = 4.
Total profit is 4.
Input: prices = [7,6,4,3,1]
Output: 0
Explanation: There is no way to make a positive profit, so we never buy the stock to achieve the maximum profit of 0.
ํ์ด
์ฒ์์๋ Dynamic Programming์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ๊น ์๊ฐํ๋ค. ๋ด๊ฐ ํ์ฌ ์ด๋ค ์ฃผ์์ ์ด์ง ๋ง์ง๊ฐ ์ ์ฒด profit์ ์ต๋๊ฐ์ ๊ฒฐ์ ์ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์กฐ๊ธ ๋ ์๊ฐํด๋ณด๋ฉด '์ฃผ์์ ํ๊ณ ๋น์ผ์ ์ด ์ ์๋ค'๋ ์กฐ๊ฑด๋๋ฌธ์ Greedy๋ก ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ต๋ํ ์ ์ ๊ฐ์ผ๋ก ๋งค์ ํด์ ์ต๋ํ์ ๊ธ์ก์ ๋งค๋ํ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ฉด๋๋ค. ๋ฐ๋ผ์ ๋์ ๋งค๋ ๊ฒฐ์ ์ด ์ ์ญ์ ์ธ ์ต๋๊ฐ์ ๊ฒฐ์ ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค. ๋ฐ๋ผ์ ์ด ์ฝ๋๋ ์์ 121๋ฒ ๋ฌธ์ ์ ์ฝ๋๋ฅผ ์ฝ๊ฐ๋ง ์์ ํด์ ํด๊ฒฐํ ์ ์๋ค.
class Solution:
def maxProfit(self, prices: List[int]) -> int:
min_val = max_val = prices[0]
ans = 0
for price in prices:
if price > max_val:
max_val = price
else:
ans += max_val - min_val
max_val = min_val = price
return ans + max_val - min_val
Takeaway
์ฒ์์ DP๋ก ํ๋ ค๊ณ ํ๋๋ฐ state variable์ ๋๊ฐ๋ก ๊ฐ์ ธ๊ฐ๋ฉด์ search space๊ฐ ์ปค์ง๊ณ pruning์ ํ๊ณ๊ฐ ์์ด์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ๋ค์ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๋ค. ์ฒ์ ๋ฌธ์ ๋ฅผ ๋ถ์ํ ๋ ์กฐ๊ฑด๊ณผ ์ดํด๋ฅผ ์ ํํ ํ๋ ๊ฒ ํ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํนํ Greedy๋ฅผ ์ธ๋๋ local optimal์ด global optimal์ธ์ง ํ์ธํ๋ ์ ์ฐจ๋ฅผ ๊ผญ ํ์ธํ์.
'IN DEPTH CAKE > Supercoder' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ฉ/LeetCode150-(10)] 45. Jump Game II (0) | 2023.08.22 |
---|---|
[์ฝ๋ฉ/LeetCode150-(9)] 55. Jump Game (13) | 2023.08.22 |
[์ฝ๋ฉ/LeetCode150-(7)] Best Time to Buy and Sell Stock (121) (0) | 2023.08.20 |
[์ฝ๋ฉ/LeetCode150-(6)] Rotate Array (189) (0) | 2023.08.20 |
[์ฝ๋ฉ/LeetCode150-(5)] Majority Element (169) (2) | 2023.08.18 |