본문 바로가기

알고리즘 정리

슬라이딩 윈도우

Q. arr=[12, 15, 11, 20, 25, 10, 20, 19, 13, 15]이 있다. 연속된 숫자 3개씩 묶어서 더 했을 때 가장 큰 수는?

 

function solution(k, arr) {
  let answer,
    sum = 0;
  for (let i = 0; i < k; i++) sum += arr[i]; //12+15+11;
  answer = sum;
  for (let i = k; i < arr.length; i++) {
    sum += arr[i] - arr[i - k];   //밑의 사진 참고!
    answer = Math.max(answer, sum);
  }
  return answer;
}

let a = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15];
console.log(solution(3, a));

 

  • 처음부터 시작되는 3가지 숫자는 for문을 통해서 더해주고 그 값을 비교할 값으로 만들어준다.

answer= sum ;

  • 그리고 다시 for문을 만든다. 이번에는 k번째부터 시작한다. 지금으로 보면 3부터 시작이다.
for(let i=k; i<arr.length; i++){}
  • sum+=arr[i]-arr[i-k]을 통해서 슬라이딩윈도우를 실행한다.(옆의 사진 참고)

 

'알고리즘 정리' 카테고리의 다른 글

기본 재귀함수  (0) 2023.05.24
Queue 자료구조  (0) 2023.05.02
스택자료구조 사용한 후위식  (0) 2023.05.01
해쉬 알고리즘  (1) 2023.04.20
빈도 수 찾기  (0) 2022.11.14