π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[μκ³ λ¦¬μ¦ μν νλ°μ§ λλ°μ§πΎ] ν¬ ν¬μΈν° κΈ°λ² λ³Έλ¬Έ
[μκ³ λ¦¬μ¦ μν νλ°μ§ λλ°μ§πΎ] ν¬ ν¬μΈν° κΈ°λ²
μ§μ§μνμΉ΄ 2023. 6. 26. 12:45<λ³Έ λΈλ‘κ·Έλ μ½λ©λ¬Έ codingmoon λμ μ νλΈλ₯Ό μ°Έκ³ ν΄μ 곡λΆνλ©° μμ±νμμ΅λλ€ :-)>
=> μ½λ©ν μ€νΈ νμ ν ν¬λ, ν¬ ν¬μΈν° κΈ°λ²
π«§ ν¬ ν¬μΈν° ν ν¬λ
: 1μ°¨μ λ°°μ΄μμ κ°μ λ€λ₯Έ μμλ₯Ό κ°λ¦¬ν€λ 2κ°μ ν¬μΈν°λ₯Ό μ¬μ©νμ¬ λͺ©νκ° κ΅¬νλ€
: μμ νμ O(n) μ루μ -> O(n) μΌλ‘ μ±λ₯ ν₯μ κ°λ₯
: μ°μλ ꡬκ°μ μμλ€μ μ²λ¦¬νκΈ° μνκ±°λ, μ λ ¬λ λ°°μ΄μμ 무μΈκ°λ₯Ό ꡬν λ ν¬ν¬μΈν° μ¬μ©
πΎ λ°°μ΄μμ, μμλ€μ ν©μ΄ xμΈ μ°μ λΆλΆ λ°°μ΄μ κ°μλ₯Ό ꡬνλΌ
arr = [1, 3, 6, 5, 2, 7, 9], x = 9
result : {3, 6}, {2, 7}, {9}
// μμ νμ O(n^2)
function cntSubArrSumOfX(arr, x) {
let cnt = 0;
for (let i = 0; i < arr.length; i ++) {
let sum = 0;
for (let j = 0; j < arr.length; j++) {
sum += arr[j];
if (sum > x) {
break;
} else if (sum == x) {
cnt ++;
break;
}
}
}
return cnt;
}
// ν¬ ν¬μΈν°
function cntSubArrSumOfX(arr, x) {
let cnt = 0;
let sum = 0;
let left = 0;
let right = 0;
while (right <= arr.length) {
if (sum === x) {
cnt ++
sum -= arr[left]
left ++
} else if (sum < x) {
sum += arr[right]
right ++
} else if (sum > x) {
sum -= arr[left]
left ++
}
}
return cnt;
}
πΎ λ°°μ΄μμ, λ κ°μ μμμ ν©μ΄ x μ κ°μμ§ νμΈνκ³ κ·Έλ λ€λ©΄ κ°κ° μμμ μΈλ±μ€ λ°ννλΌ
arr = [2, 4, 5, 7, 11, 15], x = 15
result : [1, 4]
// μμ νμ O(n^2)
function twoSumSorted(arr, x) {
for (let i = 0; i < arr.legnth; i++) {
for (let j = 1; j < arr.length; j++) {
if (arr[i] * arr[j] === x && i != j) {
return [i, j]
}
}
}
return [-1, -1];
}
// ν¬ ν¬μΈν° κΈ°λ²
// μ μͺ½μμμ sum μ΄ x λ³΄λ€ ν¬λ©΄ right --
// μ μͺ½μμμ sum μ΄ x λ³΄λ€ μμΌλ©΄ left ++
function twoSumSorted(arr, x) {
let left = 0;
let right = arr.length - 1
while (left < right) {
let sum = arr[left] + arr[right]
if (sum === x) {
return [left, right]
} else if (sum < x) {
left ++
} else if (sum > x) {
right --
}
}
return [-1, -1];
}