binary_search

μ‹œκ°„ λ³΅μž‘λ„κ°€ μƒλ‹Ήνžˆ μ€€λ‹€.

μ΅œμ ν™” 문제λ₯Ό κ²°μ •λ¬Έμ œ ( 예 ν˜Ήμ€ μ•„λ‹ˆμ˜€ 둜 λ‹΅ν•˜λŠ” 문제 ) 둜 λ°”κΎΈμ–΄ ν•΄κ²°ν•˜λŠ” νŒŒλΌλ©”νŠΈλ¦­ μ„œμΉ˜μœ ν˜•μ€ 이진탐색을 μ΄μš©ν•˜μ—¬ ν•΄κ²° κ°€λŠ₯ μ£Όμ–΄μ§„ μˆ˜κ°€ 큰 수라면 κ°€μž₯ λ¨Όμ € 이진탐색을 λ– μ˜¬λ¦¬μž

Mid ( 쀑간점 ) 이 핡심

μ’…λ£Œμ‘°κ±΄μ€ Start > end 일 λ•Œ ! 더 이상 이진탐색은 μ˜λ―Έκ°€ μ—†μŒ

μž¬κ·€

def binary_search(array, target, start, end):
    if start > end: # 이것도 λ§ˆμ°¬κ°€μ§€λ‘œ μž¬κ·€μ΄κΈ° λ•Œλ¬Έμ—, μž¬κ·€ν•΄μ„œ λ“€μ–΄μ˜¨ 것을 κ³ λ €ν•˜μ—¬ 처음 쑰건을 μ„€μ •ν•΄μ€˜μ•Ό ν•œλ‹€.
        return None
    mid = (start + end) //2 # μ€‘κ°„μ μ˜ 인덱슀

    if array[mid] == target: # 찾은 경우 인덱슀 λ°˜ν™˜
        return mid

    elif array[mid] > target: # 찾고자 ν•˜λŠ” 갑이 쀑간보닀 μž‘μ€ 경우, μ€‘κ°„μ μ˜ μ™Όμͺ½ 확인
        return binary_search(array,target,start,mid-1)

    else:
        return binary_search(array,target,mid+1,end)


n, target = list(map(int,input().split()))
array = list(map(int,input().split()))

rst = binary_search(array,target,0,n-1)

if rst == None:
    print('μ›μ†Œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.')

else:
    print(rst + 1)

반볡문

Last updated