[36일차] Sliding Window - maxSubarraySum 리뷰

저요·2022년 10월 28일

2022 100th day challenge

목록 보기
36/97

Sliding Window - maxSubarraySum

https://velog.io/@eprnfmfmfm/29일차-Sliding-Window

서론

이제 마지막 패턴인 슬라이딩 윈도우 리뷰에 들어왔다. 슬라이딩 윈도우 문제는 두 개 있었는데 이 첫번째 문제는 쉽게 풀었지만 그 다음 문제가 정말로 어려웠다. 먼저 쉽게 풀었던 maxSubarraySum을 내가 어떻게 구현했는지 해설솔루션과 비교하면서 보여주고자 한다.

본론

나는 먼저 최댓값의 윈도우를 만들어놓고 차례로 비교하는식으로 maxSubarraySum을 구현했다.
먼저 다음과 같이 -Infinity를 최댓값의 기본값으로 설정했는데, 이 이유는 만약 음수값으로 구성된 array를 인자로 받았을 경우 최댓값의 기본값을 0으로 설정하면 절대로 이 음수의 최댓값은 0을 넘지 못하기 때문에 의미가 없어진다. 때문에 가장 작은 숫자를 최댓값의 기본값으로 설정해두는것이다!

 //max값 생성
  if(arr.length === 0 || arr.length < val) return null;
  let maxVal = -Infinity;
  let tempVal = 0; 

여기까지는 좋았으나 나는 바보같이 처음에 이 무한대의 마이너스에 값을 더하는 것으로 최댓값을 구하려 했다.. 때문에 알고리즘을 구현하는 것에 좀 시간이 걸렸었다.

 for(let i = 0; i<arr.length; i++){
      //더한 값의 가장 왼쪽 값을 빼고 다음 오른쪽 값을 더한다.
      tempVal = tempVal - arr[i] + arr[val + i];
      //데이터를 비교하고 더 큰 값을 max로 세팅한다.
      if(tempVal > maxVal) maxVal = tempVal;
  }

다음과 같이 미리 구한 윈도우 값에서 차례로 움직이며 최댓값을 비교하는 식으로 함수를 구현했다.
이번에는 해설에서도 같은 방식으로 구현했기 때문에 추가로 덧붙일 것은 없는 것 같다.

참고

https://www.udemy.com/course/best-javascript-data-structures/learn/lecture/28559815#questions

profile
웹개발

0개의 댓글