
O(n2) μ루μ
μ O(n)μΌλ‘ κ°μ μν¨λ€.ν¬ν¬μΈν°μ λν λ¬Έμ μΈ κ΅¬κ° ν© λ¬Έμ λ₯Ό νμ΄λ³΄μ!
λ€μ λ°°μ΄μμ μμλ€μ ν©μ΄ xμΈ λΆλΆ λ°°μ΄μ κ°μλ₯Ό ꡬνμ¬λΌ
arr = [ 1, 3, 6, 5, 2, 7, 9 ],x = 9
λ΅ : 3κ°{3,6}, {2,7}, {9}
O(n2)const solution = (arr, x) => {
let cnt = 0;
for (let i = 0; i < arr.length; i++) {
let sum = 0;
for (let j = i; j < arr.length; j++) {
sum += arr[j];
if (sum > x) {
break;
} else if (sum == x) {
cnt++;
break;
}
}
}
return cnt;
} μ μ½λμ κ²½μ° depthκ° 2μΈ λ°λ³΅λ¬Έμ΄ μ¬μ©λλ―λ‘ μκ°λ³΅μ‘λλ O(n2)κ° λλ€. μ΄λ₯Ό κ°μ νκΈ° μν΄ ν¬ ν¬μΈν°λ₯Ό μ μ©νλ€.O(n)const solution = (arr, x) => {
let cnt= 0;
let sum = 0;
let left = 0;
let right = 0;
while(right <= arr.length){
if(sum === x){
cnt += 1
sum -= arr[left]
left += 1
}else if(sum < x){
sum += arr[right]
right += 1
}else if(sum > x){
sum -= arr[left]
left += 1
}
}
return cnt;
} μ μ½λμ κ²½μ° leftμ rightλΌλ λ κ°μ ν¬μΈνΈλ₯Ό μ€μ ν΄λλ€. κ΅¬κ° ν©μ΄κΈ° λλ¬Έμ λ κ°μ μμμ μ 0λΆν° μμνλ€.right κ°μ΄ arrμ λμ λλ¬ν λκΉμ§ λκ°μ ν¬μΈν° κ°μ μ‘°μ νλ©° μκ³ λ¦¬μ¦μ μννλ€.xμ sumμ΄ λμΌνλ€λ©΄ ꡬκ°ν©μ κ°μ cntλ₯Ό 1 μ¦κ°μμΌ μ£Όκ³ , λλ€λ₯Έ ꡬκ°ν©μ μ°ΎκΈ° μν΄ leftκ°μ 1 μ¦κ°μμΌμ€λ€. leftκ°μ 1 μ¦κ°μμΌ°μΌλ sumμμλ arr[left]μ κ°μ μ κ±°νλ€.xλ³΄λ€ sumμ΄ μλ€λ©΄ right κ°μ 1μ¦κ°μν€κ³ ꡬκ°ν©μ arr[right]κ°μ ν¬ν¨νλ€.xλ³΄λ€ sumμ΄ ν¬λ€λ©΄ left κ°μ 1 κ°μμν€κ³ ꡬκ°ν©μ arr[left]κ°μ μ κ±°νλ€.arr.lengthλ§νΌ λ°λ³΅νκΈ° λλ¬Έμ μκ° λ³΅μ‘λλ O(n)ν¬ ν¬μΈν°λ ν¬ ν¬μΈν°λ μ λ ¬ μν μ¬λΆμ μμ μμ λ±μ κ³ λ €νμ¬ μν©μ λ§κ² 쑰건μ μΈμ°λ κ²μ΄ μ€μνλ€.