정수 배열과 숫자를 인수로 받는 maxSubarraySum이라는 함수에서 숫자는 최대합을 구성하는 개수가 됩니다. 정수 배열의 최대합을 구하시오.
배열 [1, 2, 3, 4]
가 있다고 가정했을 때 arr[i]
, arr[i+1]
을 기준으로 본다면 1 + 2 = 3
이고 2 + 3 = 5
이고 3 + 4 = 7
입니다. 두 수의 합계를 기준으로 본다면 현재의 total은 3
이고 다음 total을 구하기 위해서는 3에서 1을 뺀 2
를 total에 더하여 5를 구하는 것입니다.
즉, arr[0]
+ arr[1]
을 초기 합계(total)
로 정하고 모든 배열을 선회하면서 다음 합계(currentTotal)
를 구하고 total과 currentTotal값을 비교하여 크기가 더 큰 값
을 total
에 저장합니다.
'use strict'
const 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;
}
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
num
이 더 클 경우 null을 반환합니다.total
을 0
으로 초기화하고 배열에서 num
만큼의 배열 요소들을 순서대로 더하여 저장합니다.total
을 currentTotal
변수에 복사합니다. total값은 숫자형이므로 원시값에 속하여 값이 복사됩니다.Math.max()
를 이용하여 값을 total에 저장합니다.