[29일차] Sliding Window

저요·2022년 10월 21일

2022 100th day challenge

목록 보기
29/97

문제

Sliding Window - maxSubarraySum

Given an array of integers and a number, write a function called maxSubarraySum, which finds the maximum sum of a subarray with the length of the number passed to the function.
Note that a subarray must consist of consecutive elements from the original array. In the first example below, [100, 200, 300] is a subarray of the original array, but [100, 300] is not.

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

Constraints

Time Complexity - O(N)
Space Complexity - O(1)

해결책

function maxSubarraySum(arr, val){
  //max값 생성
  if(arr.length === 0 || arr.length < val) return null;
  let maxVal = -Infinity;
  let tempVal = 0; 
  for(let i = 0; i < val; i++){
      tempVal += arr[i];
      if(tempVal > maxVal) maxVal = tempVal;
  }
  
  //바보같은 실수로 처음부터 maxVal에 더하면 되지 않겠나~ 싶어 maxVal에 += arr[i] 이런식의 로직을 작성했다.
  //-Infinity에 아무리 숫자를 더한다 해도 똑같이 무한을 더하지 않는 이상 계속 -Infinity인것을...
  //추가로 tempVal은 설정을 해주지 않으니 0으로 시작하게 되어 왼쪽 arr 값을 빼면 -가 되어 계산이 맞지 않았다.
  
  for(let i = 0; i<arr.length; i++){
      //더한 값의 가장 왼쪽 값을 빼고 다음 오른쪽 값을 더한다.
      tempVal = tempVal - arr[i] + arr[val + i];
      //데이터를 비교하고 더 큰 값을 max로 세팅한다.
      if(tempVal > maxVal) maxVal = tempVal;
  }
  
  return maxVal;
}

출처

https://www.udemy.com/share/105zfq3@c0G-Q7UBfQluzaT4C7ahY69USRlBRjEZkhvnHVRzifrw-FEVt2Vnc_pA1VjWUbtn3w==/

profile
웹개발

0개의 댓글