๐ก ์ด์ง ํ์ = ์ด๋ถ ํ์ ( Binary Search )
์ ๋ ฌ๋ ๋ฐฐ์ด ๋๋ ๋ฆฌ์คํธ์ ์ ํฉํ ๊ณ ์ ํ์ ๋ฐฉ๋ฒ
- ๋ฐฐ์ด์ ์ค์์ ์๋ ๊ฐ์ ์กฐ์ฌํ์ฌ ์ฐพ๊ณ ์ ํ๋ ํญ๋ชฉ์ด ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ ๋ถ๋ถ ๋ฐฐ์ด์ ์๋์ง๋ฅผ ์์๋ด์ด ํ์์ ๋ฒ์๋ฅผ ๋ฐ์ผ๋ก ์ค์ธ๋ค.
- ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ํด์์ง ์์ ๋ถ๋ถ์ ์ ํ ๊ณ ๋ คํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์, ๋งค ๋จ๊ณ์์ ๊ฒ์ํด์ผ ํ ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ ๋ฐ์ผ๋ก ์ค์ธ๋ค.
- ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํด ํ์ํ๋ ๋ฐฉ๋ฒ์ด ์ด์งํ์์ด๋ค.
๐ก ์ด์ง ํ์์ ๊ตฌํ
1. ํ์์ ๋์์ด ๋๋ ์๋ฃ๋ค์ด array[low] ์์๋ถํฐ array[high]์ ๋ค์ด์๋ค. ( ์ ๋ ฌ๋์ด์์ด์ผํจ )
์ฆ, ์ด๋ค ์์ ์์ ํ์๋์ด์ผ ํ ๋ฒ์๋ low~high๊น์ง๊ฐ ๋๋ค.
๋งจ ์ฒ์ low์๋ 0๋ฒ index์ ๊ฐ, high์๋ n-1๋ฒ index์ ๊ฐ์ด ๋ค์ด๊ฐ ๊ฒ์ด๋ค.
2. low์ high ๊ฐ์ ์๊ฑฐํด ์ค๊ฐ๊ฐ mid ๊ฐ์ (low+high)/2 ์ด๋ค.
3. array[mid] ๊ฐ๊ณผ ๊ตฌํ๊ณ ์ ํ๋ key ๊ฐ์ ๋น๊ตํ๋ค.
- key > mid : ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ๊ฐ๋ณด๋ค ๋๋ค๋ฉด low๋ฅผ mid+1๋ก ( ์ผ์ชฝ ๋ฐ์ ๋ฒ๋ฆผ )
- key < mid : ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ๊ฐ๋ณด๋ค ๋ฎ๋ค๋ฉด high๋ฅผ mid-1๋ก ( ์ค๋ฅธ์ชฝ ๋ฐ์ ๋ฒ๋ฆผ )
- key == mid : ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ ์ฐพ์ผ๋ฉด, mid๊ฐ return
4. low > high๊ฐ ๋ ๋๊น์ง 1~3๋ฒ์ ๋ฐ๋ณตํ๋ฉด์ ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ ๊ฒ์
์ฝ๋ ๊ตฌํ
// ๊ฐ์ธ์ ์ธ ๋ณ์๋ช
์ผ๋ก low/high -> lt/rt๋ก ์ฌ์ฉ
// 5๊ฐ์ ์ ์๊ฐ ๋ด๊ธด ๋ฐฐ์ดarr ์๋ค๊ณ ๊ฐ์
// arr๋ ์ ๋ ฌ๋ ์ํ ( sort(arr) )
int lt=0, rt=n-1;
while(lt<=rt){
int mid=(rt+lt)/2;
if(arr[mid]==key){
return mid; // ๋ฐํ
}else if(key<arr[mid]){
rt=mid-1; // ์ค๋ฅธ์ชฝ ๋ฐ์ ๋ฒ๋ฆผ
}else{
lt=mid+1; // ์ผ์ชฝ ๋ฐ์ ๋ฒ๋ฆผ
}
return -1; // ํ์ ์คํจ
}
'๐ ์ฝ๋ฉํ ์คํธ > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ์ฌ๊ทํจ์ ( ๋ฉ๋ชจ์ด์ ์ด์ ) (0) | 2022.11.03 |
---|---|
[JAVA] HashMap (0) | 2022.10.28 |
[JAVA] List : LinkedList (0) | 2022.10.26 |
[JAVA] List : ArrayList (0) | 2022.10.26 |
[JAVA] StringBuilder (0) | 2022.10.26 |