๐ section05 - 3 - ์ฐ์ ๋ถ๋ถ์์ด1
N
๊ฐ์ ์๊ฐ ์์ ๋, ์ฐ์ ๋ถ๋ถ ์์ด์ ํฉ์ด target
๊ณผ ๋์ผํ ๊ฒฝ์ฐ๊ฐ ๋ช ๋ฒ์๋์ง ์ฐพ๋ ๋ฌธ์ ๋ค. ์ด์ ๊น์ง๋ ์ด์ ๋น์ทํ ์ ํ์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณธ ๊ฒฝํ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ ค์ ๋ค. N<=100,000
์ผ ๋ ์ต๋ O(nlogn)
์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ง์กฑํด์ผ ์๊ฐ ์ด๊ณผ๋ฅผ ๋ฐ์ง ์๋๋ค. ์ฆ, bruteForce(O(N^2))
๋์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋ค.
์ฝ๋์์๋ while + while
๋ฌธ์ ์ฌ์ฉํ๋๋ฐ, ๋ฐ๋ณต๋ฌธ์ 2๊ฐ ์ฌ์ฉํ๋ฉด ๋ฌด์กฐ๊ฑด O(N^2))
์ด ๋๋ ๊ฒ ์๋๊ฐ์?๋ผ๊ณ ํ ์๋ ์๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก๋ ๊ทธ๋ ์ง ์๋ค. ์ด์ค ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋๋ผ๋ ๊ทธ ์์์ ์ด๋ค ์ฐ์ฐ์ ํ๋๋์ ๋ฐ๋ผ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฌ๋ผ์ง ์ ์๋๋ฐ, ํ์ฌ ์ฝ๋์์๋ ์์ชฝ ๋ฃจํ๊ฐ ๋๋ ์ดํ์๋ฅผ ๋ค ํฉํ์ ๋ ๊ผญ O(N)
์ด ๋์ง ์๋๋ค. ์๋ํ๋ฉด ์์ชฝ ๋ฃจํ์ ์กฐ๊ฑด์ ๋ณด๋ฉด sum>=m
์ธ๋ฐ, ๋ง์ฝ, ํ์ฌ ์กฐ๊ฑด์ด sum<m
์ด๋ผ๋ฉด ์์ชฝ ๋ฃจํ๋ ์คํ๋์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ํฌ ํฌ์ธํฐ ๋ณ์์ธ
lt=rt=0
์ผ๋ก ์ด๊ธฐํํ๋ค. sum
๋ณ์์arr[rt]
๊ฐ์ ๋ํ๋ค.sum === target
์ด๋ฉด,cnt++
ํด์ค๋ค.- ๋ง์ฝ,
sum>target
์ด๋ฉด,lt
๋ฅผ ์ฆ๊ฐํด์sum<=target
์ด ๋ ๋๊น์ง ๋นผ์ค์ผ ํ๋ค. while
๋ฌธ ์์์lt
๋ฅผ ๋นผ์คฌ์ ๋๋3
๋ฒ ๊ณผ์ ์ ๊ฑฐ์น๋ค. (์ฌ๊ธฐ์ ์์๋์ด์ผ ํ๋ ์ ์sum===target
์ด์ด๋lt
๋ฅผ ๋นผ์ค์ผ ๋ค์rt
๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์๋ค.)
// ๋์ ์ฝ๋
let n = 8;
let target = 6;
let arr = [1, 2, 1, 3, 1, 1, 1, 2];
console.log(solution(n, target, arr));
function solution(n, target, arr) {
let lt = (rt = cnt = sum = 0);
while (rt < n) {
sum += arr[rt++];
if (sum === m) cnt++;
while (sum >= m) {
sum -= arr[lt++];
if (sum === m) cnt++;
}
}
return cnt;
}
// ๊ฐ์ ์ฝ๋
let n = 8;
let target = 6;
let arr = [1, 2, 1, 3, 1, 1, 1, 2];
console.log(solution(n, target, arr));
function solution(n, target, arr) {
let lt = (cnt = sum = 0);
for (let rt = 0; rt < n; rt++) {
sum += arr[rt];
if (sum === target) cnt++;
while (sum >= target) {
sum -= arr[lt++];
if (sum === target) cnt++;
}
}
return cnt;
}
๋๊ธ