- ์ด์ง ํ์ ํน์ ์ด๋ถ ํ์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ ์๋ฃ ๊ตฌ์กฐ์์ ํน์ ๊ฐ์ ์ฐพ์ ๋, ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ๋๋ ๊ฐ๋ฉด์ ํด๋น ๊ฐ์ ์ฐพ์๊ฐ๋ ๊ฒ์ด๋ค.
- ์ฆ, ํ์ ๋ฒ์๋ฅผ ๋ ๋ถ๋ถ์ผ๋ก ๋ถํ ํ๋ฉด์ ์ฐพ๋ ๋ฐฉ์์ด๋ค.
- ์ฒ์๋ถํฐ ๋๊น์ง ๋๋ฉด์ ํ์ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
์๊ฐ ๋ณต์ก๋
- ์ ์ฒด ํ์ : O(N)
- ์ด๋ถ ํ์ : O(logN)
์งํ ์์
- ์ ๋ ฌ์ ํ๋ค.
- left์ right๋ก mid ๊ฐ์ ์ค์ ํ๋ค.
- mid์ ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ ๋น๊ตํ๋ค.
- ๊ตฌํ ๊ฐ์ด mid๋ณด๋ค ํฌ๋ฉด -> left = mid + 1
- ๊ตฌํ ๊ฐ์ด mid๋ณด๋ค ๋ฎ์ผ๋ฉด -> right = mid - 1
- right < left๊ฐ ๋ ๋๊น์ง ๊ณ์ ๋ฐ๋ณตํ๋ค.
[Code]
package Study;
import java.util.Arrays;
/**
* created by victory_woo on 2020/04/30
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {2, 13, 6, 5, 12, 15, 23, 17, 19, 10,};
System.out.println(solution(17, arr));
}
private static int solution(int target, int[] arr) {
Arrays.sort(arr);
int left = 0, right = arr.length - 1, mid = 0;
while (left < right) {
mid = (left + right) / 2;
if (target == arr[mid]) {
System.out.println("Find Target : " + target + ", Value : " + arr[mid]);
return arr[mid];
}
if (target < arr[mid]) right = mid - 1;
else left = mid + 1;
}
return -1;
}
}
๊ฒฐ๊ณผ๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ, ์ฐพ์๋ค๋ ๋ฉ์์ง์ ํจ๊ป ์ฐพ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ -1์ ๋ฐํํ๋ค.