728x90
๐ section07 - 10 - ์ด๋ถ๊ฒ์
์ด๋ถ๊ฒ์์ ์๊ฐ ๋ณต์ก๋๊ฐ O(logN)
์ผ๋ก ์ ํ ๊ฒ์์ธ O(N)
๋ณด๋ค ๋น ๋ฅธ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋ ํจ๊ณผ์ ์ธ๋ฐ, ์๋ฅผ ๋ค์ด 1,000,000
๊ฐ์ ๋ฐ์ดํฐ์์ ํน์ ๊ฐ์ ์ฐพ๋๋ค๊ณ ๊ฐ์ ํ๋ฉด, ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด ์ ํ์ ์ผ๋ก ํ์ํ๋ฉด ์ต์
์ ๊ฒฝ์ฐ ๋ฐฑ๋ง๋ฒ
์ ๋์์ผ ํ์ง๋ง ์ด์งํ์(binarySearch)
์ ์ด์ฉํ๋ฉด ์ต๋ 11
๋ฒ๊น์ง ๋๋ฉด ๋๋ค. ํ์ง๋ง, ์ด์งํ์์ ์ค๋ฆ์ฐจ์
ํน์ ๋ด๋ฆผ์ฐจ์
์ผ๋ก ์ ๋ ฌ๋์ด์์ด์ผ ์ฐพ์ ์ ์๋ ์ ์ ์กฐ๊ฑด์ด ์๋ค.
while
๋ฌธ์ ๋ฒ์๋lt<=rt
์ธ๋ฐ,lt
์rt
๊ฐ ๊ฐ์ ๋๊น์ง ๋๊ณ ๊ทธlt
๊ฐrt
๋ณด๋ค ์ปค์ง ๊ฒฝ์ฐ๋ ํ์์ ์ข ๋ฃํ๋ค.mid
๊ฐ์ ๊ฒฝ์ ํ๋ค.target
์ดarr[mid]
๋ณด๋ค ์ผ์ชฝ์ ์์ ๊ฒฝ์ฐ ํ์ฌmid
์ค๋ฅธ์ชฝ์๋ ๋ด๊ฐ ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ์์ผ๋ฏ๋ก ๋ค์rt
๋ฅผmid-1
๋ก ์ฌ์ค์ ํ๋ค.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;
}
}
๋ฐ์ํ
๋๊ธ