1. 문제
Sliding Window - maxSubarraySum
정수의 배열과 숫자가 주어졌을 때, 함수에 전달된 숫자의 길이를 가진 하위 배열의 최대 합을 구하는 maxSubarraySum이라는 함수를 작성하세요.
하위 배열은 원래 배열의 연속적인 요소로 구성되어야 한다는 점에 유의하세요. 아래 첫 번째 예제에서 [100, 200, 300]은 원래 배열의 하위 배열이지만 [100, 300]은 그렇지 않습니다.
예시:
maxSubarraySum([100,200,300,400], 2) // 700
maxSubarraySum([1,4,2,10,23,3,1,0,20], 4) // 39
maxSubarraySum([-3,4,0,-2,6,-1], 2) // 5
maxSubarraySum([3,-2,7,-4,1,-1,4,-2,1],2) // 5
maxSubarraySum([2,3], 3) // null
제약 조건:
Time Complexity - O(N)
Space Complexity - O(1)
2. 내 해결책
const maxSubarraySum = (subArr, sumNum) => {
if(subArr.length < sumNum) return null;
let maxNum = 0;
let changeNum = 0;
for(let i = 0; i < sumNum; i++){
maxNum += subArr[i];
}
changeNum = maxNum;
for(let i = 0; i < subArr.length - sumNum; i++){
let totalNum = changeNum - subArr[i] + subArr[i + sumNum];
changeNum = totalNum
if(maxNum < changeNum){
maxNum = changeNum;
}
}
return maxNum;
}
3. 다른 해결책
function maxSubarraySum(arr, num){
if (arr.length < num) return null;
let total = 0;
for (let i=0; i<num; i++){
total += arr[i];
}
let currentTotal = total;
for (let i = num; i < arr.length; i++) {
currentTotal += arr[i] - arr[i-num];
total = Math.max(total, currentTotal);
}
return total;
}
4. 느낀점
1. 굳이 왜 changeNum을 위에서 선언해서 할당 했는지 모르겠다. 더 코드를 간략화 하자.
let changeNum = 0;
changeNum = maxNum;
=>
let currentTotal = total;
2. 변수명도 changeNum 보단 currentTotal이 더 적절했을듯. 마찬가지로 maxNm => total
3. 해결책은 num을 0 부터 아닌 숫자의 길이로 잡아서 코드를 간략화 했다. 이건 더 배워야 할듯.
'Algorithm > udemy JavaScript 알고리즘 & 자료구조 마스터클래스' 카테고리의 다른 글
[Algorithm] areThereDuplicates 중복 있는지 확인하기 6-4 (0) | 2025.01.20 |
---|---|
[Algorithm] sameFrequency 두 숫자의 자릿수가 같은 빈도를 갖는지 구하기 6-3 (0) | 2025.01.20 |