Algorithm/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ด์ง„ ํƒ์ƒ‰(Binary Search)

meeeeejin 2021. 7. 12. 20:28

์ด์ง„ ํƒ์ƒ‰

๐Ÿ’ก ์•„์ด๋””์–ด

๋ฐฐ์—ด์—์„œ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ขํ˜€๊ฐ€๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•ด๋ณด์ž!!

โญ๋‹จ, ๋ฐฐ์—ด ๋‚ด ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.โญ

 

 

๐Ÿ’ก ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…

  1. ํƒ์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฒ”์œ„(start, end)๋ฅผ ์ •ํ•œ๋‹ค. 
  2. start์™€ end ์‚ฌ์ด mid๋ฅผ ์ •ํ•œ๋‹ค. 
  3. mid์˜ ๋ฐ์ดํ„ฐ์™€ ์ฐพ์œผ๋ ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•œ๋‹ค. 
    1) ๊ฐ™์„ ๊ฒฝ์šฐ
        - ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ๋‹ค. 
    2) ์ค‘๊ฐ„์ ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ํด ๊ฒฝ์šฐ 
        - end๋ฅผ (mid - 1)๋กœ ์„ค์ •ํ•ด mid์˜ ์™ผ์ชฝ์„ ํƒ์ƒ‰ํ•œ๋‹ค. 
    3) ์ค‘๊ฐ„์ ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ์ž‘์„ ๊ฒฝ์šฐ
        - start๋ฅผ (mid + 1)๋กœ ์„ค์ •ํ•ด mid์˜ ์˜ค๋ฅธ์ชฝ์„ ํƒ์ƒ‰ํ•œ๋‹ค. 
  4. start์™€ end ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋™์•ˆ 2~3์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. 

 

์ถœ์ฒ˜: https://www.geeksforgeeks.org/binary-search/

 

 

๐Ÿ’ก ์†Œ์Šค ์ฝ”๋“œ

๋‹ค์Œ์€ array ๋‚ด์˜ target์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. 

 

- ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•œ ์ด์ง„ ํƒ์ƒ‰

def binarySearch(array, target, start, end):
  if start > end:
    return None

  mid = (start + end) // 2

  if array[mid] == target:
    return mid
  elif array[mid] > target:
    return binarySearch(array, target, start, mid - 1)
  else:
    return binarySearch(array, target, mid + 1, end)

 

- ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•œ ์ด์ง„ ํƒ์ƒ‰

def binarySearch2(array, target, start, end):
  while start <= end:
    mid = (start + end) // 2
    if array[mid] == target:
      return mid
    elif array[mid] > target:
      end = mid - 1
    else:
      start = mid + 1
    return None

 

 

๐Ÿ’ก ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ์˜ ์ด์ง„ ํƒ์ƒ‰

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ์˜ ์ด์ง„ ํƒ์ƒ‰ ๋ฌธ์ œ๋Š” ์ฃผ๋กœ ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ํฐ ์ƒํ™ฉ์—์„œ์˜ ํƒ์ƒ‰์„ ๊ฐ€์ •ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค. ๋”ฐ๋ผ์„œ ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ 2000๋งŒ์„ ๋„˜์–ด๊ฐ€๋ฉด ์ด์ง„ ํƒ์ƒ‰์„ ๋– ์˜ฌ๋ ค๋ณด์ž! 

 

์ฐธ๊ณ ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋‚˜ ๊ฐ’์ด 1000๋งŒ ๋‹จ์œ„ ์ด์ƒ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฉด ์ด์ง„ ํƒ์ƒ‰๊ณผ ๊ฐ™์ด O(logN)์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋– ์˜ฌ๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. 

 

์ด์ง„ ํƒ์ƒ‰ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ, ๋งŽ~~~์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ input()์œผ๋กœ ๋ฐ›์œผ๋ ค ํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์˜ค๋‹ต ํŒ์ •์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿด ๋• sys ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ readline() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด input() ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์‹ค ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ์–ด๋Š ์ •๋„์ผ ๋•Œ ์จ์•ผ ํ•˜๋Š”์ง€๋Š” ์•„์ง ๊ฐ์ด ์•ˆ ์˜จ๋‹ค..!๐Ÿ˜ฅ

 

# ๋น ๋ฅด๊ฒŒ ์ž…๋ ฅ ๋ฐ›๊ธฐ
import sys
input = lambda: sys.stdin.readline().rstrip()
data = list(map(int, input().split()))
print(data)

 

 

 

 

 

 

 

์ฐธ๊ณ  ์ž๋ฃŒ: ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with Python (๋‚˜๋™๋นˆ ์ €, ํ•œ๋น›๋ฏธ๋””์–ด)

 

 

 

 

728x90