10주차 · 스택 · 큐 · 덱
보통

최근 K개의 이동 평균

숫자가 하나씩 들어오는 배열 nums와 창 크기 k가 주어져요. 값이 하나 들어올 때마다 가장 최근 K개의 평균을 구해서, 그 평균들을 순서대로 담은 배열로 반환해요.

아직 K개가 안 모였다면 지금까지 들어온 값 전부의 평균을 써요. K개를 넘기면 가장 오래된 값은 창에서 빠져요. 예를 들어 k = 3이면 4번째 값부터는 바로 앞 3개만 평균에 넣어요.

예시

예시 1
예시 2

제한 사항

  • 1 ≤ k ≤ nums.length ≤ 100,000
  • -10,000 ≤ nums[i] ≤ 10,000
창 안의 값을 큐(또는 덱)에 담아 둬요. 새 값을 넣을 때 합에 더하고, 창이 K를 넘으면 가장 오래된 값을 큐에서 빼면서 그만큼 합에서도 빼요. 그러면 매 단계 평균을 창 크기에 상관없이 빠르게 구할 수 있어요.
javascript
function movingAverage(nums, k) {
const result = [];
const window = [];
let head = 0;
let sum = 0;
for (const n of nums) {
window.push(n);
sum += n;
if (window.length - head > k) {
sum -= window[head];
head++;
}
result.push(sum / (window.length - head));
}
return result;
}
이전 문제올바른 괄호
에디터를 불러오고 있어요…
코드를 작성하고를 눌러 예시 테스트를 확인해 보세요.