๋ฐ์ํ
[LeetCode] 121. Best Time to Buy and Sell Stock
https://leetcode.com/problems/best-time-to-buy-and-sell-stock
๋ฌธ์ ์ ๊ทผ
๊ฐ์ฅ ์ธ๊ฒ ์ฌ์ ๊ฐ์ฅ ๋น์ธ๊ฒ ์์ ๋ ์ป๋ ์ด์ค์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ด์ฉํด์ dp๋ฐฐ์ด์ ์ง๊ธ๊น์ง ์ค์์ ๊ฐ์ฅ ์ผ ๊ฐ์ ์ ์ฅํ๊ณ ํ์ฌ ๋ ์ง์ ๊ฐ๊ฒฉ prices[i]์ ๊ทธ ์ ๋ ๊น์ง ๊ฐ์ฅ ์ผ ๊ฐ๊ฒฉ dp[i-1]์ ๋นผ์ ์ด์ค์ ๊ตฌํ ๋ค์ max์ ๋น๊ตํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค๋ ๊ฐ๊ฒฉ์ด dp[i-1]๋ณด๋ค ์ธ๋ค๋ฉด dp[i]๋ฅผ ์ค๋ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ ์๋๋ผ๋ฉด dp[i-1]์ ๋ฃ์ด์ค๋ค.
Code
class Solution {
public int maxProfit(int[] prices) {
int max = 0;
int[] dp = new int[prices.length]; // i๋ฒ์งธ ๋ ๊น์ง ์ค ๊ฐ์ฅ ์ผ ๋ฌผ๊ฑด์ ๊ฐ ์ ์ฅ
dp[0] = prices[0];
for(int i =1; i<prices.length; i++){
int profit = prices[i] - dp[i-1]; // ์ง๊ธ๊น์ง ๊ฐ์ฅ ์ผ ๋ฌผ๊ฑด์ ๊ฐ์ ์ ์ฅํ๊ณ ์ค๋ ํ์์ ๋ ๋์ฌ์ ์๋ ์ด์ค์ ๊ณ์ฐ
if(profit > max){
// ์ค๋ ์ด์ค์ด max๋ณด๋ค ํฌ๋ค๋ฉด max๋ฅผ ์ ์ฅ
max = profit;
}
dp[i] = (dp[i-1] > prices[i]) ? prices[i] : dp[i-1]; // ์ค๋ ๊ฐ๊ฒฉ์ด ๋ ์๋ค๋ฉด ์ง๊ธ๊น์ง ์ค ๊ฐ์ฅ ๋ฎ์ ๊ฐ๊ฒฉ์ด๋ฏ๋ก dp[i]์ ์ ์ฅ
}
return max;
}
}
์ด๋ ค์ ๋ ์ / ๋ฐฐ์ด ์ / ๋๋ ์
๋ง์ด ํ์ด๋ณธ DP๋ฌธ์ ๋ผ์ ์ฝ๊ฒ ์ ๊ทผํด์ ํ์๋ ๋ฌธ์ ์ด๋ค. ๊ตณ๊ตณ
๋ฐ์ํ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][๋ฐฑ์ค] 1676๋ฒ ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์ (0) | 2022.02.14 |
---|---|
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (0) | 2022.02.14 |
[Algorithm/Java][LeetCode] 101. Symmetric Tree (0) | 2022.02.05 |
[Algorithm/Java][๋ฐฑ์ค] 2805๋ฒ ๋๋ฌด ์๋ฅด๊ธฐ (0) | 2022.01.28 |
[Algorithm/Java][LeetCode] 70. Climbing Stairs (0) | 2022.01.25 |