Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section07 - 10 - ์ด๋ถ„๊ฒ€์ƒ‰

YWTechIT 2021. 9. 13. 14:02
728x90

๐Ÿ“ section07 - 10 - ์ด๋ถ„๊ฒ€์ƒ‰

์ด๋ถ„๊ฒ€์ƒ‰์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(logN)์œผ๋กœ ์„ ํ˜• ๊ฒ€์ƒ‰์ธ O(N)๋ณด๋‹ค ๋น ๋ฅธ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ํšจ๊ณผ์ ์ธ๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด 1,000,000๊ฐœ์˜ ๋ฐ์ดํ„ฐ์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด ์„ ํ˜•์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉด ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฐฑ๋งŒ๋ฒˆ์„ ๋Œ์•„์•ผ ํ•˜์ง€๋งŒ ์ด์ง„ํƒ์ƒ‰(binarySearch)์„ ์ด์šฉํ•˜๋ฉด ์ตœ๋Œ€ 11๋ฒˆ๊นŒ์ง€ ๋Œ๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์ด์ง„ํƒ์ƒ‰์€ ์˜ค๋ฆ„์ฐจ์ˆœ ํ˜น์€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์žˆ์–ด์•ผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ „์ œ์กฐ๊ฑด์ด ์žˆ๋‹ค.

 

  1. while๋ฌธ์˜ ๋ฒ”์œ„๋Š” lt<=rt์ธ๋ฐ, lt์™€ rt๊ฐ€ ๊ฐ™์„ ๋•Œ๊นŒ์ง€ ๋Œ๊ณ  ๊ทธ lt๊ฐ€ rt๋ณด๋‹ค ์ปค์งˆ ๊ฒฝ์šฐ๋Š” ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ๋‹ค.
  2. mid๊ฐ’์„ ๊ฒฝ์‹ ํ•œ๋‹ค.
  3. target์ด arr[mid]๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ์„ ๊ฒฝ์šฐ ํ˜„์žฌ mid ์˜ค๋ฅธ์ชฝ์—๋Š” ๋‚ด๊ฐ€ ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ ๋‹ค์Œ rt๋ฅผ mid-1๋กœ ์žฌ์„ค์ •ํ•œ๋‹ค.
  4. target์ด arr[mid]๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ์„ ๊ฒฝ์šฐ ํ˜„์žฌ mid ์™ผ์ชฝ์—๋Š” ๋‚ด๊ฐ€ ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ lt๋ฅผ mid+1๋กœ ์žฌ์„ค์ •ํ•œ๋‹ค.

 

728x90

 

let arr = [23, 87, 65, 12, 57, 32, 99, 81];
let m = 32;

console.log(binarySearch(arr, m));
๐Ÿ‘‰๐Ÿฝ 3

function binarySearch(arr, target){ 
    let lt = 0;
    let rt = arr.length - 1;
    arr.sort((a, b) => a - b);

    while (lt <= rt) {
        let mid = Math.floor((lt + rt) / 2);

        if (arr[mid] === target) return mid + 1;
        else if (arr[mid] > target) rt = mid-1;
        else lt = mid+1;
    }
}
๋ฐ˜์‘ํ˜•