ALGORITHM/Inflearn
효율성(슬라이딩 윈도우) 5. 최대 매출
Harimad
2022. 2. 21. 18:07

문제
배열이 주어질때 k번 만큼 연속되는 숫자의 합이 가장 큰 값은 무엇인가?
예를 들어 12 15 11 20 25 10 20 19 13 15의 배열 값이 있을때
k가 3이라면, 11 + 20 + 25 = 56 값이 가장 큰 합이 된다.
풀이

코드
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));
아래는 시간 복잡도가 O(n^2)이라 비효율 적이다.
//이런문제는 슬라이딩 윈도우로 하는 습관을 들여 놓는게 좋다.
function solution(k, arr){
let answer = [];
let sum = tmp = 0;
for(let pin = 0; pin < arr.length - 2; pin++) {
//아래의 코드를 while문으로 만들어 본다.
// sum += arr[pin];
// sum += arr[pin+1];
// sum += arr[pin+2];
tmp = pin;
while (tmp < k) {
sum += arr[tmp++];
}
answer.push(sum);
sum = 0;
k++;
}
// return answer; //[38, 46, 56, 55, 55, 49, 52, 47]
return Math.max(...answer); //56
}
let a=[12, 15, 11, 20, 25, 10, 20, 19, 13, 15];
console.log(solution(3, a));
출처
자바스크립트 알고리즘 문제풀이(코딩테스트 대비) - 인프런 | 강의
자바스크립트(JavaScript)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 재미있게 풀 수 있는 기초 단계 문제부터 고급 알고리즘까지 단계별로 차근차근 배우도록 설계된 강좌입니다., - 강의
www.inflearn.com