๐ section05 - 5 - ์ต๋ ๋งค์ถ
์ฐ์๋ K
์ผ ๋์์ ์ต๋ ๋งค์ถ์ก์ ๊ตฌํ๋ slidingWindow
๋ฌธ์ ์ธ๋ฐ ์ฌ๊ธฐ์ ๋ฌธ์ ์ธ ๊ฑด slidingWindow
์ ์ฒ์ ๋ฐฐ์ด๊ฒ์ด๋ค. twoPointer
๋ฅผ ๋ฐฐ์ ๋ค๋ฉด ๋ฒ์๋ฅผ ๋ง์ด ๋ฒ์ด๋์ง ์์์ ๋คํ์ด์๋ค. N
์ ๋ฒ์๋ 100,000
๊น์ง์ธ๋ฐ, ๋ง์ฝ, ์๊ฐ๋ณต์ก๋๊ฐ O(N^2)
์ด์๋ค๋ฉด ์๊ฐ์ด๊ณผ ํ์ ์ ๋ฐ์์ ๊ฒ์ด๋ค. ๋๋๋ก O(nlogn)
์ด๋ด๋ก ๋์.
์ด ๋ฌธ์ ์ ํต์ฌ ์์ง๋์ฐ์๋ 3์ผ๊ฐ
์ธ๋ฐ, ๋๋ while
๋ฌธ์ผ๋ก ํฌ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด์ rt-lt+1===k
์ ์งํค๋ ์ ์์ ์ต๋๋งค์ถ์ ๊ณ์ฐํ๋ค. ๊ทธ์ ๋น์ทํ๊ฒ ๊ฐ์ฌ๋์ for
๋ฌธ์ผ๋ก ํธ์
จ๋๋ฐ, ์ด์ ์ k
๋ฒ์งธ๊น์ง์ ํฉ์ ๊ตฌํด๋๊ณ , sum
์ ๋์ ํ๋ฉด์ k
๋ฒ์งธ ์ด์ ์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ ๋นผ์คฌ๋ค. ์ฆ, ์ด์ ๋จ๊ณ+ํ์ฌ ๋จ๊ณ์ ์ค๋ณต๋๋ ์๋ ์ฐ์ฐ์์ ์ ์ธ์ํค๊ณ ๋ค์ sum
์ ๋์ ๋ ์๋ก์ด ๊ฐ๊ณผ k
๋ฒ์งธ ์ด์ ์ ๊ฐ๋ง ์ฐ์ฐ์ ํฌํจ์ํค๋ ๊ฒ์ด๋ค.
k
๋ฒ์งธ ์ด์ ์ ์ธ๋ฑ์ค๋ง ๋นผ์ฃผ๋ ์ด์ ๋ ์ด์ index
์ ํ์ฌ index
๋ ์ค๋ณต๋๊ธฐ ๋๋ฌธ์ธ๋ฐ, ๋ง์ฝ bruteForce
๋ก ํ์๋ค๋ฉด ์ค๋ณต๊ฐ์ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด์ค ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ ๊ฒ์ด๋ค. bruteForce
๋ก๋ ํ์ด๋ดค๊ณ slidingWindow
๋ก๋ ํ์๋ค.
// bruteForce
let n = 10;
let k = 3;
let arr = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15];
for (let i=0; i<n-k+1; i++){
let max = 0;
for (let j=i; j<i+k; j++){
max += arr[j]
}
console.log(max)
}
let n = 10;
let k = 3;
let arr = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15];
// sliding window1 ๋์ ์ฝ๋
function solution(n, k, arr) {
let lt = rt = currentSum = 0;
let max = Number.MIN_SAFE_INTEGER;
while (rt < n) {
currentSum += arr[rt];
if (rt-lt+1 === k) {
max = Math.max(max, currentSum);
currentSum -= arr[lt++];
}
rt++;
}
return max;
}
// sliding window2 ๊ฐ์ ์ฝ๋
function solution(n, k, arr) {
let lt = rt = currentSum = 0;
let max = Number.MIN_SAFE_INTEGER;
let answer;
for (let i=0; i<k; i++) currentSum+=arr[i];
answer = currentSum;
for (let i=k; i<n; i++){
currentSum+=(arr[i] - arr[i-k])
answer = Math.max(answer, currentSum);
}
return answer;
}
๋๊ธ