Sliding Window - maxSubarraySum
이제 마지막 패턴인 슬라이딩 윈도우 리뷰에 들어왔다. 슬라이딩 윈도우 문제는 두 개 있었는데 이 첫번째 문제는 쉽게 풀었지만 그 다음 문제가 정말로 어려웠다. 먼저 쉽게 풀었던 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