LeetCode 121 - Best Time to Buy and Sell Stock โ
๋ฌธ์ ์ค๋ช โ
์ฃผ์ด์ง prices
๋ฐฐ์ด์์, i๋ฒ์งธ ๋ ์ ์ฃผ์์ ์ฌ๊ณ j๋ฒ์งธ ๋ ์ ํ๋ค๊ณ ํ ๋ (i < j), ์ป์ ์ ์๋ ์ต๋ ์ด์ต์ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค. ์ฃผ์์ ํ ๋ฒ๋ง ์ฌ๊ณ ํ ๋ฒ๋ง ํ๋ ๊ฒ๋ง ๊ฐ๋ฅํฉ๋๋ค.
์ ๊ทผ ๋ฐฉ๋ฒ - Greedy (๊ทธ๋ฆฌ๋) ๋ฐฉ์ โ
์ด ๋ฌธ์ ๋ฅผ ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์์๋ถํฐ ์ต์ ๊ฐ๊ฒฉ์ ์ ์ฅํ๋ฉด์ ํ์ฌ ๊ฐ๊ฒฉ๊ณผ์ ์ฐจ์ด๋ก ์ต๋ ์ด์ต์ ๊ณ์ฐํ๋ ๊ฒ์ ๋๋ค.
ํต์ฌ ์์ด๋์ด โ
- ํ ๋ฒ ์ํํ๋ฉด์ ์ต์ ๊ฐ๊ฒฉ(minPrice) ์ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
- ํ์ฌ ๊ฐ๊ฒฉ์์ ์ต์ ๊ฐ๊ฒฉ์ ๋บ ๊ฐ์ ํ์ฌ๊น์ง์ ์ต๋ ์ด์ต(maxProfit) ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
- ๊ณผ๊ฑฐ ๊ฐ๊ฒฉ๋ง ๋ณด๊ณ , ๋ฏธ๋ ๊ฐ๊ฒฉ์ ํ๊ธฐ ์ํด ์์์๋ถํฐ ํ์ํฉ๋๋ค.
์ฝ๋ โ
typescript
function maxProfit(prices: number[]): number {
let minPrice = Number.MAX_SAFE_INTEGER
let maxProfit = 0
for (let price of prices) {
if (price < minPrice) {
minPrice = price
} else {
maxProfit = Math.max(maxProfit, price - minPrice)
}
}
return maxProfit
}
์๊ฐ ๋ฐ ๊ณต๊ฐ ๋ณต์ก๋ โ
๊ตฌ๋ถ | ๋ณต์ก๋ |
---|---|
์๊ฐ ๋ณต์ก๋ | O(n) |
๊ณต๊ฐ ๋ณต์ก๋ | O(1) |
- ํ ๋ฒ์ for๋ฌธ์ผ๋ก ์ ์ฒด ๋ฐฐ์ด์ ์ํ โ O(n)
- ์ถ๊ฐ ๋ฐฐ์ด์ด๋ ์๋ฃ๊ตฌ์กฐ ์์ด ๋ณ์๋ง ์ฌ์ฉ โ O(1)
์ฃผ์ ํฌ์ธํธ โ
- ์์์๋ถํฐ ํ์ํ์ฌ ์ต์ ๊ฐ๊ฒฉ์ ์ฐพ๊ณ , ํ์ฌ ๊ฐ๊ฒฉ๊ณผ์ ์ฐจ์ด๋ก ์ต๋ ์ด์ต ๊ณ์ฐ
- ์๊ฐ ํจ์จ์ฑ๊ณผ ๊ณต๊ฐ ํจ์จ์ฑ์ด ๋ชจ๋ ์ต์
- ์ธํฐ๋ทฐ์์๋ ์์ฃผ ์ถ์ ๋๋ ์ ํ์ ์ธ ์ต์ ํ ๋ฌธ์ ํจํด
์์ โ
bash
Input: prices = [7,1,5,3,6,4]
Output: 5
์ค๋ช
:
- ์ต์ ๊ฐ๊ฒฉ = 1 (2๋ฒ์งธ ๋ )
- ์ต๋ ์ด์ต = 6 - 1 = 5 (5๋ฒ์งธ ๋ ์ ํ์์ ๋)