728x90
    
    
  ์์ฐจ ํ์
- ๋ฆฌ์คํธ ์์ ์๋ ํน์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด ์์์๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์ฐจ๋ก๋๋ก ํ์ธํ๋ ๋ฐฉ๋ฒ
- ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ์ฐพ๊ณ ์ ํ๋ ๋ฐ์ดํฐ์ ์ผ์นํ๋์ง ํ์ธํ์ฌ ์ผ์นํ๋ฉด ํ์ ์ข ๋ฃ, ์ผ์นํ์ง ์์ผ๋ฉด ๋ค์ ์์๋ก ์ด๋ํ๋ค.
# ์์ฐจ ํ์
def sequential_search(n, target, array):
    for i in range(n):
        if array[i] == target:
            return i+1  # ํ์ฌ ์์น ๋ฐํ (-๋ฒ์งธ)
 array = ['S', 'T', 'A', 'R']  # ์์ ์ง์  ๋ฆฌ์คํธ
 print("๋ฆฌ์คํธ ์ A์ ์์น๋ " + sequential_search(len(array), 'A', array) + "์
๋๋ค.") # ํ์ ๊ฒฐ๊ณผ ์ถ๋ ฅ์ด์ง ํ์
- ๋ฆฌ์คํธ ๋ด์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์์ด์ผ๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ฒ์๋ฅผ ๊ณ์ ์ค์ฌ๋๊ฐ๋ฉฐ ์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ์ ๋ฒ์์ ์ค๊ฐ์ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋น๊ตํด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๊ฐ๋ ๋ฐฉ๋ฒ
์์) ์ ๋ ฌ๋ 10๊ฐ์ ๋ฐ์ดํฐ ์ค์์ ๊ฐ์ด 4์ธ ์์ ์ฐพ๊ธฐ
- ์์์ ๊ณผ ๋์  ์ฌ์ด์ ์ค๊ฐ์ ์ ๊ตฌํ๋ค. ์ค๊ฐ์ ์ด ์ค์์ผ ๋๋ ์์์  ์ดํ๋ฅผ ๋ฒ๋ฆฐ๋ค. ๊ทธ๋ฆผ์์ ์์์ ์ [0], ๋์ ์ [9]์ด๋ฏ๋ก ์ค๊ฐ์ ์ [4]์ด๋ค. ๋ฐ๋ผ์, ์ค๊ฐ์  [4]์ ๋ฐ์ดํฐ 8๊ณผ ์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ 4๋ฅผ ๋น๊ตํ๋ค. ์ค๊ฐ์ ์ ๋ฐ์ดํฐ 8์ด ๋ ํฌ๋ฏ๋ก ๋์ ์ [4]์ ์ด์ ์ธ [3]์ผ๋ก ์ฎ๊ฒจ ๋ฒ์๋ฅผ ์ขํ๋ค. 
- ์์์  [0], ๋์  [3]์ ์ค๊ฐ์  [1]์ ์์นํ ๋ฐ์ดํฐ 2๋ ์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ 4๋ณด๋ค ์์ผ๋ฏ๋ก ์์์ ์ [2]๋ก ์ฎ๊ฒจ ๋ฒ์๋ฅผ ๋ค์ํ๋ฒ ์ขํ๋ค. 
- ์์์  [2], ๋์  [3]์ ์ค๊ฐ์  [2]์ ์์นํ ๋ฐ์ดํฐ 4๋ ์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ 4์ ๊ฐ์ผ๋ฏ๋ก ํ์์ ์ข
๋ฃํ๋ค. 
# ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ตฌํํ ์ด์ง ํ์
def binary_search(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  # ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
# ์์์ ๊ฐ์(n)๊ณผ ์ฐพ๊ณ ์ํ๋ ๊ฐ(target) ์
๋ ฅ๋ฐ๊ธฐ
n, target = map(int, input().split())
# ์ ์ฒด ์์ ์
๋ ฅ๋ฐ๊ธฐ
array = list(map(int, input().split()))
# ์ด์ง ํ์ ๊ฒฐ๊ณผ ์ถ๋ ฅ
result = binary_search(array, target, 0, n-1)
if result == None:
    print("ํด๋น ๋ฐ์ดํฐ๋ ์กด์ฌํ์ง ์์ต๋๋ค.")
else: 
    print(result + 1)ํ์ด์ฌ ์ด์งํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Bisect
โป ๋ฐ๋์ data๊ฐ ์ฌ์ ์ ์ ๋ ฌ๋์ด ์์ด์ผ ํจ
- bisect.bisect\_left(data, x): data๋ด์ x๊ฐ ๋ค์ด๊ฐ ์ ์๋ ๊ฐ์ฅ ์ผ์ชฝ์(์์) ์ธ๋ฑ์ค ๋ฐํ
- bisect.bisect\_right(data, x): data๋ด์ x๊ฐ ๋ค์ด๊ฐ ์ ์๋ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์(ํฐ) ์ธ๋ฑ์ค ๋ฐํ
import bisect
data = [1, 2, 2, 3, 4]
x = 2
print(bisect.bisect_left(data, x))  # 1
print(bisect.bisect_right(data, x))  # 3728x90
    
    
  ![[์๊ณ ๋ฆฌ์ฆ] ๋ฒ์๋ฅผ ๋ฐ์ฉ ์ขํ๊ฐ๋ ์ด์ง ํ์ - ํ์ด์ฌ(Python)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdavYLk%2Fbtra09L9K1I%2FAAAAAAAAAAAAAAAAAAAAAMgHbuM2tYOituMcvjd6gSe_v5MU57VjtJuzSvd3Vh1M%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1761922799%26allow_ip%3D%26allow_referer%3D%26signature%3Do1mz%252FzE5a9gQ5HP8UZMM%252F2GjKqs%253D)