public static int search(int[] nums, int target) {
int start = 0, end = nums.length - 1;
while(start <= end) {
int mid = (start + end) / 2;
if(nums[mid] == target) {
return mid;
}
if(nums[mid] < target) {
start = mid + 1;
} else {
end = end - 1;
}
}
return -1; // target ์์
}
์ด์ง ํ์์ divide and conquer์ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์๋ค.
์๊ฐ ๋ณต์ก๋๋ O(logn)์ด ๋๋๋ฐ, ์ฒ์์๋ ํ์ํด์ผ ํ ๋ฐ์ดํฐ๊ฐ N๊ฐ๋ผ๋ฉด N๊ฐ ๋ชจ๋๊ฐ ํ์ ๋ฒ์๊ฐ ๋๋ค. ๊ทธ ์ดํ
๋ค์ ํ์์์ ํ์ ๋ฒ์๋ ์ ๋ฐ์ผ๋ก ์ค์ด N/2 ๊ฐ ๋๊ณ ๊ทธ ๋ค์ ํ์์์ ํ์ ๋ฒ์๋ ๋ ์ ๋ฐ์ผ๋ก ์ค์ด N/4๊ฐ ๋๊ณ ๊ทธ ๋ค์์ N/8, N/16 ์ด ๋๊ฒ ๋๋ค.
์ฆ ํ์ํด์ผ ํ๋ ํ์๊ฐ k ๋ผ๋ฉด N๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ๋ฐ N = 2^k๊ฐ ๋๋ค.
k์ ๊ฐ์ ๊ตฌํ๋ ค๋ฉด k = log2(N)์ด๋ผ ํ ์ ์๋ค.
๋ก๊ทธ๊ฐ ์ฝํ ์ฌ๋๋ค์ ์ํ ํ
log2(8) ์ 2๋ฅผ ๋ช ์ ๊ณฑ ํด์ผ 8์ด๋ผ๋ ๊ฐ์ ์ป์ ์ ์๋๋๋ ๋ป์ด๋ค. log2(2^3) ์ด๋ฉฐ ์ด๋ 3log2(2)๋ก ํํ ํ ์ ์๋ค.
log2(2), log3(3) ... ๋ฑ์ ๊ฐ์ด ์ผ์ด๋ฏ๋ก 3log2(2) = 3 ์ด ๋๋ค.
์ฆ 2^3 = 8 ์ด๊ณ 3 = log2(8)์ด ๋๋ค.
์์์ ํ์ ๋ฒ์๋ 2^k = N ์ด๋ฏ๋ก ์ด๋ฅผ ๋ก๊ทธ๋ก ํํํ๋ฉด k = log2(N)์ด๋ผ๊ณ ํ ์ ์๋ค!
'Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
StringTokenizer ์ฌ์ฉํด์ ๋ฌธ์์ด์ ๋จ์ด ๊ฐฏ์ ๊ตฌํ๊ธฐ (0) | 2024.03.08 |
---|---|
2023.12.02~03 ์ฝ๋ฉํ ์คํธ (1) | 2023.12.03 |
2023.12.01 ์ฝ๋ฉํ ์คํธ (1) | 2023.12.01 |