[LeetCode] 53. Maximum subarray
https://leetcode.com/problems/maximum-subarray/
๋ฌธ์ ์ ๊ทผ
์ฃผ์ด์ง ๋ฐฐ์ด์์ ์ฐ์๋๋ ๊ฐ์ ๋ํ sum์ด ๊ฐ์ฅ ํฐ subarray์ sum์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์ฒ์์ ์ด ๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ธ ๊ฒ ๊ฐ์์ dp๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค๊ณ dp[i]๋ i๋ฒ์งธ ์ธ๋ฑ์ค๊น์ง ์ค์ ๊ฐ๋ฅํ ๊ฐ์ฅ ํฐ subarray์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ ํ์๋ค.(๋ฐฉ๋ฒ1)
๊ทผ๋ฐ ๋ฐฉ๋ฒ1๋ก ํ๊ณ ๋ณด๋๊น ๊ตณ์ด dp๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ์ผ์ผ์ด ๋ค ์ ์ฅํ ํ์ ์์ด ํ์ฌ์ธ๋ฑ์ค ์ ์ subarray๊ฐ(dp[i-1])๋ง ์๋ฉด ๋ ๊ฑฐ ๊ฐ์๋ค. ์ฆ ๋ฐฐ์ด์ ๋ง๋ค์ง ์๊ณ dp[i-1]์ ์ ์ฅํ๋ sum์ด๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์ dp[i-1] ์ด์ ๊ฐ(dp[i-2] ... dp[0])์ ๊ฐ์ ์ ์ฅํ์ง ์๊ณ ํธ๋ ๋ฐฉ์์ ์ผ๋ค.(๋ฐฉ๋ฒ2)
ํ์ง๋ง ์ด์ํ๊ฒ๋ LeetCode์์ ์ ๊ณตํด์ฃผ๋ Runtime๊ณผ Memory ๊ฐ์์๋ ๋ฐฉ๋ฒ 1์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ์ ์๋ค.(????) (์๋๊ฐ ๋ฐฉ๋ฒ1, ์๊ฐ ๋ฐฉ๋ฒ2)
Code
//๋ฐฉ๋ฒ1
class Solution {
public int maxSubArray(int[] nums) {
int[] dp = nums; // dp = ํด๋น ์ธ๋ฑ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฐ์ด
dp[0] = nums[0];
int max = dp[0]; // sum์ ์ต๋๊ฐ ์ ์ฅ
for(int i = 1; i<nums.length; i++){
if(dp[i] < dp[i-1] + nums[i]){
// ํ์ฌ ๊ฐ๋ณด๋ค i-1๋ฒ์งธ ์ต๋๊ฐ + ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ด ํด ๊ฒฝ์ฐ
dp[i] = dp[i-1] + nums[i];
}
if(max < dp[i])
max = dp[i];
}
return max;
}
}
//๋ฐฉ๋ฒ2
class Solution {
public int maxSubArray(int[] nums) {
int max = nums[0]; // ์ต๋๊ฐ ์ ์ฅ
int sum = nums[0]; // ์ง๊ธ๊น์ง sum ๊ฐ
for(int i = 1; i<nums.length; i++){
sum = Math.max(sum+nums[i] , nums[i]); //sum + ํ์ฌ๊ฐ ๊ณผ ํ์ฌ๊ฐ ์ค ํฐ๊ฒ์ sum์ ์ ์ฅ
max = Math.max(sum,max); // sum์ด ํฐ ์ง max๊ฐ ํฐ ์ง ๋น๊ต
}
return max;
}
}
์ด๋ ค์ ๋ ์ / ๋ฐฐ์ด ์ / ๋๋ ์
๋ญ๊ฐ ๋๋์ด ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ด์ฌ์ ํ์๋๋ฐ ๋ง๋๋ฏ ์ถ๋ค.(?)
๋ฐฉ๋ฒ 2๊ฐ ๋ฐฉ๋ฒ 1 ๋ณด๋ค ์คํ์๊ฐ์ ๋ชฐ๋ผ๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ ํจ์จ์ ์ผ ์ค ์์๋๋ฐ ์๋์ฌ์ ์ถฉ๊ฒฉ์ ์ด์๋ค.
๋ด๊ฐ ์ธ์ด ๊ฐ์ค์
- sum์ ์๋ก์ด ๊ฐ์ ๋ฃ์ ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฆ๊ฐํ๋?
- Math.max ๊ฐ ๋ฌธ์ ์ธ๊ฐ?
๊ทธ๋์ ์ผํญ์ฐ์ฐ์๋ก ์ฝ๋๋ฅผ ๋ฐ๊ฟ๋ณด์๋ค.
๊ฒฐ๋ก ์ Math.max๊ฐ ๋ฌธ์ ์๋ ๊ฒ ๊ฐ๋ค! ๐๐//๋ฐฉ๋ฒ3 class Solution { public int maxSubArray(int[] nums) { int max = nums[0]; // ์ต๋๊ฐ ์ ์ฅ int sum = nums[0]; // ์ง๊ธ๊น์ง sum ๊ฐ for(int i = 1; i<nums.length; i++){ sum = Math.max(sum+nums[i] , nums[i]); //sum + ํ์ฌ๊ฐ ๊ณผ ํ์ฌ๊ฐ ์ค ํฐ๊ฒ์ sum์ ์ ์ฅ max = Math.max(sum,max); // sum์ด ํฐ ์ง max๊ฐ ํฐ ์ง ๋น๊ต } return max; } }
์์ผ๋ก Math.max ๋ณด๋ค๋ ์ผํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ผ๊ฒ ๋ค..!!
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][๋ฐฑ์ค] 2805๋ฒ ๋๋ฌด ์๋ฅด๊ธฐ (0) | 2022.01.28 |
---|---|
[Algorithm/Java][LeetCode] 70. Climbing Stairs (0) | 2022.01.25 |
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ์ด์ํ ๋ฌธ์ ๋ง๋ค๊ธฐ (0) | 2022.01.21 |
[Algorithm/Java][BOJ] 3052๋ฒ ๋๋จธ์ง (0) | 2022.01.21 |
[Algorithm/Java][BOJ] ๋ฐฑ์ค 2908๋ฒ ์์ (0) | 2022.01.20 |