** μ΄μ§ νμμ΄λ ?
λ΄λΆμ λ°μ΄ν°κ° μ λ ¬λμ΄ μμ λ μ¬μ©ν μ μλ μκ³ λ¦¬μ¦
- μ΄λ―Έ μ λ ¬λμ΄ μλ€λ©΄ λ°μ΄ν°λ₯Ό λ§€μ° λΉ λ₯΄κ² μ°Ύμ μ μλ€λ νΉμ§μ΄ μμ
- νμ λ²μλ₯Ό μ λ°μ© μ’νκ°λ©° λ°μ΄ν°λ₯Ό νμ
- μκ° λ³΅μ‘λ O(logN)
ꡬν λ°©λ²
μ΄μ§ νμμ μμΉλ₯Ό λνλ΄λ λ³μ 3κ°λ₯Ό μ¬μ©νλλ° νμνκ³ μ νλ λ²μμ μμμ (start), λμ (end), μ€κ°μ (mid)μ μ΄μ©
μ°ΎμΌλ €λ λ°μ΄ν°μ μ€κ°μ (mid)μμΉμ μλ λ°μ΄ν°λ₯Ό λ°λ³΅μ μΌλ‘ λΉκ΅νμ¬ μνλ λ°μ΄ν°λ₯Ό μ°Ύμ
μΈμ μ¨μΌνλ ?
μ½λ© ν μ€νΈμμμ μ΄μ§ νμ λ¬Έμ λ νμ λ²μκ° ν° μν©μμμ νμμ κ°μ νλ λ¬Έμ κ° λ§λ€. λ°λΌμ νμ λ²μκ° 2000λ§μ λμ΄κ°λ©΄ μ΄μ§ νμμΌλ‘ λ¬Έμ μ μ κ·Όν΄λ³΄λ κ²μ΄ μ’μ κ² κ°λ€. μ²λ¦¬ν΄μΌ ν λ°μ΄ν°μ κ°μλ κ°μ΄ 1000λ§ λ¨μ μ΄μμΌλ‘ λμ΄κ°λ©΄ μ΄μ§ νμκ³Ό κ°μ΄ O(logN)μ μλλ₯Ό λ΄μΌ νλ μκ³ λ¦¬μ¦μ λ μ¬λ €μΌ λ¬Έμ λ₯Ό ν μ μλ κ²½μ°κ° λ§λ€κ³ νλ€.
μ΄μ§ νμ μ½λ(μ¬κ·λ₯Ό ν΅ν ꡬν)
# μ΄μ§ νμ μμ€μ½λ ꡬν(μ¬κ· ν¨μ)
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)
# elif array[mid] > target:
# return binary_search(array, target, start, mid-1)
# else:
# return binary_search(array, target, mid+1, end)
# n(μμμ κ°μ)κ³Ό target(μ°Ύκ³ μ νλ λ¬Έμμ΄)μ μ
λ ₯λ°κΈ°
n, target = list(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)
μ΄μ§ νμ μ½λ(λ°λ³΅λ¬Έμ ν΅ν ꡬν)
# μ΄μ§ νμ μμ€μ½λ ꡬν (λ°λ³΅λ¬Έ)
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
# elif mid > target:
# end = mid - 1
# else:
# start = mid + 1
return None
# n(μμμ κ°μ)κ³Ό target(μ°Ύκ³ μ νλ λ¬Έμμ΄)μ μ
λ ₯λ°κΈ°
n, target = list(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)