728x90
๋ฐ์ํ
๐ 10 - ์ด๋ถ ๊ฒ์
์์์ N๊ฐ์ ์ซ์๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค. N๊ฐ์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๋ค์ N๊ฐ์ ์์ค ํ ๊ฐ์ ์์ธ target์ด ์ฃผ์ด์ง๋ฉด ์ด๋ถ ๊ฒ์์ผ๋ก target์ด ์ ๋ ฌ๋ ์ํ์์ ๋ช ๋ฒ์งธ์ ์๋์ง ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๋จ, ์ค๋ณต๊ฐ์ ์กด์ฌํ์ง ์๋๋ค.
์ด๋ถ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ด๋โ
- ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ํน์ ํ ๊ฐ์ ์์น๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ์ด๋ถ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ O(logN)์ผ๋ก ์์ฐจ ๊ฒ์์ ์๊ฐ ๋ณต์ก๋ O(N)์ ๋นํ๋ฉด ์๋์ ์ผ๋ก ๋น ๋ฅธ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ์ํ๋ค. ๋ค์ ํ์ด ๋ฐฉ๋ฒ์ ๋ณด๋ฉด ๊ทธ ์ด์ ๋ฅผ ์ ์ ์์ ๊ฒ์ด๋ค.
ํ์ด ๋ฐฉ๋ฒ
- ๋ฐฐ์ด์ ์ ๋ ฌํ๋ค. ์ด๋ถ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ด๋ค.
- ๋ฐฐ์ด์ ์ฒ์(start)๊ณผ ๋(end)์ ์ธ๋ฑ์ค๋ฅผ ๋ํ ํ 2๋ก ๋๋์ด ๋ฐฐ์ด์ ์ค๊ฐ ์ธ๋ฑ์ค(mid)์ ๊ตฌํ๋ค. ๋จ, ์ธ๋ฑ์ค๋ ์์์ ์ ํฌํจํ์ง ์์ผ๋ฏ๋ก Math.floor() ํจ์๋ฅผ ์ด์ฉํด ์์์ ์ดํ๋ฅผ ๋ฐ์ฌ๋ฆผํ๋ค.
- ์ฐพ๊ณ ์ ํ๋ ๊ฐ(target)์ด ์ค๊ฐ ๊ฐ(arr[mid])๋ณด๋ค ํฌ๋ฉด ์ค๊ฐ ๊ฐ์ ํฌํจํ ํ์ ๊ฐ๋ค์ ํ์ ๋์์์ ์ ์ธ๋๋ค.
- ๋ฐ๋๋ก ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ค๊ฐ ๊ฐ์ ํฌํจํ ์์ ๊ฐ๋ค์ ํ์ ๋์์์ ์ ์ธ๋๋ค.
- ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ ๊ฐ๊ณผ ๊ฐ๋ค๋ฉด answer ๋ณ์์ ์ค๊ฐ ์ธ๋ฑ์ค(mid) + 1์ ์ ์ฅํ๊ณ while ๋ฌธ์ ๋น ์ ธ๋์จ๋ค.
๐ ํ์ด
function solution(target, arr) {
let answer;
arr.sort((a, b) => a - b);
let start = 0;
let end = arr.length - 1;
while (start <= end) {
let mid = Math.floor((end + start) / 2);
if (arr[mid] === target) {
answer = mid + 1;
break;
} else if (arr[mid] < target) {
start = mid + 1;
} else {
end = mid - 1;
}
}
return answer;
}
let arr = [23, 87, 65, 12, 57, 32, 99, 81];
console.log(solution(32, arr));
๐ ์ฐธ๊ณ ํ ์ฌ์ดํธ
'Algorithm > ์ธํ๋ฐ(inflearn)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/section 7] 12 - ๋ง๊ตฌ๊ฐ ์ ํ๊ธฐ (0) | 2022.10.12 |
---|---|
[JavaScript/section 7] 11 - ๋ฎค์ง ๋น๋์ค (0) | 2022.10.10 |
[JavaScript/section 7] 09 - ๊ฒฐํผ์ (2) | 2022.10.08 |
[JavaScript/section 7] 08 - ํ์์ค ๋ฐฐ์ (0) | 2022.10.07 |
[JavaScript/section 7] 07 - ์ขํ ์ ๋ ฌ (0) | 2022.10.06 |