Skip to content

Sliding Window ​

μŠ¬λΌμ΄λ”© μœˆλ„μš°(sliding window) μ•Œκ³ λ¦¬μ¦˜μ€ 배열을 μ΄μš©ν•œ λ¬Έμ œμ—μ„œ 자주 μ‚¬μš©λœλ‹€.

전체 λ°°μ—΄μ—μ„œ νŠΉμ • μ—°μ†λœ λ²”μœ„λ₯Ό κ³„μ‚°ν• λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©λ˜λ©° μ‚¬μš©λ°©λ²•μ€ μ•„λž˜μ™€ κ°™λ‹€.

slidingwindow

λΆ€λͺ¨ λ°°μ—΄μ˜ μ„œλΈŒ 배열을 λ§Œλ“€μ–΄μ„œ 쑰건에 맞게 μ„œλΈŒ λ°°μ—΄μ˜ μ–‘μͺ½μ„ λŠ˜λ Έλ‹€ μ€„μ˜€λ‹€ν•˜λŠ” λ°©λ²•μœΌλ‘œ 이런 방법을 톡해 λΆ€λͺ¨ λ°°μ—΄μ˜ 전체λ₯Ό μ„œλΈŒ 배열이 μ΄λ™ν•˜λ©΄μ„œ 쑰건에 λ§žλŠ” μƒνƒœκ°€ μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.

μ½”λ“œ ​

μ•„λž˜ μ½”λ“œλŠ” νŠΉμ • μžμ—°μˆ˜(N)이 λ„£μœΌλ©΄ 1λΆ€ν„° NκΉŒμ§€μ˜ μžμ—°μˆ˜λ“€ μ€‘μ—μ„œ μ—°μ†λ˜λŠ” 합이 N이 λ˜λŠ” 개수λ₯Ό μ°ΎλŠ” μ½”λ“œμ΄λ‹€.

js
const slidingwindow = (n) => {
    const slidingWindow = Array(n).fill().map((_,idx) => idx+1)
    let [start, end, cnt] = [0,1,0]
    while (start < end && end <= n) {
        const sum =  slidingWindow.slice(start,end).reduce((acc,cur) => acc + cur)
        sum === n && cnt++;
        sum >= n && start++;
        sum < n && end++;
    }
    return cnt;
}

console.log(slidingwindow(15)); // 4