Deep_Dev
article thumbnail

๐Ÿ’ก ์ด์ง„ ํƒ์ƒ‰ = ์ด๋ถ„ ํƒ์ƒ‰ ( 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