# μ΄μ§κ²μ
written by sohyeon, hyemin π‘
# 1. μ΄μ§κ²μμ΄λ?
μμκ° μ€λ¦μ°¨μ λλ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬λ λ°°μ΄μμ κ²μνλ μκ³ λ¦¬μ¦μ΄λ€.
μλλ nκ°μ μμκ° μ€λ¦μ°¨μμΌλ‘ λμ΄μ λ°°μ΄ aμμ ν€λ₯Ό μ΄μ§ κ²μμΌλ‘ κ²μνλ κ³Όμ μ ννν κ²μ΄λ€.
pl
μ κ²μ λ²μμ 맨 μ μΈλ±μ€, pr
μ 맨λ μΈλ±μ€, pc
λ μ€μ μΈλ±μ€λΌκ³ μ§μ νλ€.
κ²μμ μμν λ pl
μ 0, pr
μ n-1, pc
λ (n-1)/2λ‘ μ΄κΈ°νμ΄λ€.
μ΄μ§κ²μμ ν λ¨κ³μ© μ§νν λλ§λ€ κ²μ λ²μκ° (κ±°μ)λ°μΌλ‘ μ’νμ§λ€.
λν κ²μ¬ν μμλ₯Ό νλμ© μ μΈμν€λ μ ν κ²μκ³Όλ λ€λ₯΄κ²
μ΄μ§ κ²μμ κ²μ μμκ° ν΄λΉ λ¨κ³μμ λ€μμ κ²μν λ²μμ μ€κ° μ§μ μΌλ‘ λ¨μ¨μ μ΄λνλ νΉμ§μ κ°λλ€.
μμ κ·Έλ¦Όμ μ±κ³΅νμ λμ μμμ΄λ€.
λ§μ§λ§ κ³Όμ μ²λΌ a[pc]μ keyλ₯Ό λΉκ΅νμ¬ κ°μΌλ©΄ κ²μμ μ±κ³΅νμ¬ κ³Όμ μ΄ λλλ€.
νμ§λ§ μνλ κ°μ μ°Ύμ§λͺ»νλ©΄ κ°μ λ°©λ²μΌλ‘ κ²μ λ²μλ₯Ό μ’νκ°λ©° λ°λ³΅νκ² λλ€.
μ΄ λ, λκ°μ§ κ²½μ°μ λ°λΌ λ€λ₯΄κ² κ²μ λ²μλ₯Ό μ’νκ² λλ€.
a[pc]<keyμΌλ
a[pl]~a[pc]λ keyλ³΄λ€ μμ κ²μ΄ λΆλͺ νλ―λ‘ κ²μλμμμ μ μΈνλ€.
κ²μ λ²μλ a[pc]λ³΄λ€ λ€μͺ½μ a[pc+1]~a[pr]λ‘ μ’νλ€.
κ·Έλ° λ€μ plμ κ°μ pc+1λ‘ μ λ°μ΄νΈ νλ€.a[pc]>keyμΌλ
a[pc]~a[pr]μ keyλ³΄λ€ ν° κ²μ΄ λΆλͺ νλ―λ‘ κ²μλμμμ μ μΈνλ€.
κ²μ λ²μλ a[pc]λ³΄λ€ μμͺ½ a[pl]~a[pc-1]λ‘ μ’νλ€.
κ·Έλ° λ€μ prμ κ°μ pc-1λ‘ μ λ°μ΄νΈ νλ€.
# μ΄μ§ κ²μμ μ’ λ£ μ‘°κ±΄
- a[pc]μ keyκ° μΌμΉνλ κ²½μ°
- κ²μ λ²μκ° λ μ΄μ μλ κ²½μ°
# μμ μ½λ
class BinSearch{
//μμμκ° nμΈ λ°°μ΄ aμμ keyμ κ°μ μμλ₯Ό μ΄μ§ κ²μ
static int binSearch(int[] a, int n, int key){
int pl = 0;
int pr = n-1;
do{
int pc = (pl+pr)/2; // μ€μ μΈλ±μ€ μμ
if(a[pc]==key)
return pc; // κ²μ μ±κ³΅
else if(a[pc]<key)
pl = pc+1; // κ²μ λ²μλ₯Ό λ€μͺ½ μ λ°μΌλ‘ μ’ν
else
pr = pc-1; // κ²μ λ²μλ₯Ό μμͺ½ μ λ°μΌλ‘ μ’ν
} while (pl<=pr);
return -1
}
public static void main(Stirng[] args){
Scanner stdIn = new Scanner(System.in);
System.out.print("μμμ: ");
int num = stdIn.nextInt();
int[] x = new int[num];
System.out.println("μ€λ¦μ°¨μμΌλ‘ μ
λ ₯νμΈμ.");
System.out.print("x[0]: ");
x[0] = stdIn.nextInt();
for(int i=0; i<num; i++){
do{
System.out.print("x["+i+"]:");
x[i] = stdIn.nextInt();
} while (x[i]<x[i-1]);
}
System.out.print("κ²μν κ°:");
int ky = stdIn.nextInt();
int idx = binSearch(x, num, ky); // λ°°μ΄ xμμ ν€ κ°μ΄ kyμΈ μμλ₯Ό κ²μ
if(idx==-1)
System.out.println("κ·Έ κ°μ μμκ° μμ΅λλ€.");
else
System.out.println(ky+"μ(λ) x["+idx+"]μ μμ΅λλ€.");
}
}
μμ μμ μ½λμμλ μλ°λ‘ μ§μ μ΄μ§νμμ ꡬνν΄ λ³΄μλ€.
νμ§λ§ Javaλ λ°°μ΄μμ μ΄μ§ κ²μμ νλ λ©μλλ₯Ό νμ€ λΌμ΄λΈλ¬λ¦¬λ‘ μ 곡νλ€.
java.util.Arrays ν΄λμ€μ binarySearch λ©μλμ΄λ€.
μλ£νμ λ°λΌ 9κ°μ§ λ°©λ²μΌλ‘ μ€λ²λ‘λ© λμ΄ μλ€.
Java API 곡μλ¬Έμλ₯Ό ν΅ν΄ λ©μλμ λν μ€λͺ
μ νμΈν μ μλ€.
# Java binarysearch λ©μλμ μ₯μ
μ΄μ§ κ²μ λ©μλλ₯Ό μ§μ μ½λ©ν νμκ° μλ€.
λͺ¨λ μλ£ν λ°°μ΄μμ κ²μν μ μλ€.