μ΄μ§νμμ λ°°μ°κΈ° μ μ μ ννμ(Linear Search)λ¨Όμ λ³΄κ² μ΅λλ€.
** μ ννμμ΄λ, μ΄μ§νμμ μμλ μ€λ¦μ°¨μμ΄λ λ΄λ¦Όμ°¨μμΌλ‘ λμ΄ μμ΄μΌ μ μ©ν μ μλ μκ³ λ¦¬μ¦μ λλ€.
let arr = [2, 4, 6, 8, 11, 14];
μμ λ°°μ΄μμ μμκ° 8μΈκ²μ μ°ΎμΌλ €λ©΄ μ΄λ»κ² ν΄μΌν κΉμ?
index 0μμλΆν° 5κΉμ§ μ°¨λ‘λλ‘ μμλ₯Ό νμΈνλ©΄μ 8μ΄ λμ¬ λκΉμ§ for λ¬Έμ λ리면 λ©λλ€.
μ΄λ κ² μ²« index λΆν° νλνλ μ°Ύμλμλ κ²μ μ ννμμ΄λΌκ³ ν©λλ€.
κ·Έλ°λ° λ°°μ΄μ κΈΈμ΄κ° 1000μ΄κ³ , 1000μ΄λΌλ μμλ₯Ό μ°ΎμμΌ νλλ° arr[9999]μ 1000μ΄ μλ€κ³ κ°μ νλ€λ©΄ λͺ λ²μ forλ¬Έμ΄ λμκ°κΉμ?
λ€, 1000λ² μ
λλ€.
μ΄λ κ² μ ννμμ λ¨μ μ μμμ λ°λΌ νμμ μ¬λ¬ λ² ν΄μΌν μλ μλ€λ μ μ
λλ€.
μ¦, 1μ μ°ΎμΌλ €λ©΄ forλ¬Έμ ν λ²λ§ λλ €λ λλλ°, 1000μ μ°ΎμΌλ €λ©΄ forλ¬Έμ 1000λ² λλ €μΌ νλ€λ λ§μ
λλ€.
λ§μ½ forλ¬Έ λ΄λΆμ 볡μ‘ν κ³μ°μ΄ λ€μ΄μλ€λ©΄ μ€νμλκ° λλ €μ§κ³ ν¨μ¨μ μ΄μ§ μμ λ‘μ§μ΄ λ κ²μ
λλ€.
κ·ΈλΌ μ’ λ ν¨κ³Όμ μΈ μκ³ λ¦¬μ¦μ΄ μμκΉμ?
λ€! λ°λ‘ μ΄μ§ νμμ
λλ€.
μ΄μ§ νμμ μμλλ‘ μ°Ύλ κ²μ΄ μλλΌ, μ€κ°λΆν° μ°Ύμ λμλ λ°©λ²μ
λλ€.
λ§μ½ μλμ κ°μ λ°°μ΄μμ 7μ μ°ΎμμΌ νλ€λ©΄,
첫 λ²μ§Έλ‘ μ€κ° μμΉμ μμλ₯Ό λΉκ΅νκ³ (7<14)μ°ΎμμΌν κ°λ³΄λ€ ν¬λ©΄ μΌμͺ½μ μ€κ°μμ λ€μ λΉκ΅ν©λλ€.
λ€μ ν λ² ν¬κΈ°λ₯Ό λΉκ΅ν΄μ μ€λ₯Έμͺ½μ μ€κ°μΌλ‘ κ°μ§, μΌμͺ½μ μ€κ°μΌλ‘ κ°μ§ κ²°μ νμ¬ λ€μ μ°Ύμλμλ κ²μ μ΄μ§ νμλ²μ΄λΌκ³ ν©λλ€.
μ€λ¦μ°¨μμΈ μ«μ nums λ°°μ΄κ³Ό μ°ΎμμΌν targetμ μΈμλ‘ μ£Όλ©΄,
targetμ΄ λͺ λ²μ§Έ indexμΈμ§ return ν΄μ£ΌμΈμ.
Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
μ€λͺ
: μ°Ύμ§ λͺ»νλ©΄ -1λ‘ return ν΄μ£ΌμΈμ.
const nums = [-1,0,3,5,9,12];
const target = 9;
const search = (nums, target) => {
let low = 0
let high = nums.length - 1
while (low <= high) {
let mid = Math.floor((low + high) / 2)
if (nums[mid] < target) {
low = mid + 1
} else if (nums[mid] > target) {
high = mid - 1
} else {
return mid
}
}
return -1
}
search(nums, target); // 4