νΈλ¦¬
μ΄μ§ νμ
λ°°μ΄ λ΄λΆμ λ°μ΄ν°κ° μ λ ¬λμ΄ μμ λ μ¬μ©ν μ μλ μκ³ λ¦¬μ¦.
νμ λ²μλ₯Ό μ λ°μ© μ’νκ°λ©° λ°μ΄ν°λ₯Ό νμνλ νΉμ§μ΄ μλ€.
μ΄μ§ νμμ ν λλ μμμ , λμ , μ€κ°μ 3κ°μ λ³μλ₯Ό μ¬μ©νλ€.
# μ΄μ§νμμμ€μ½λ ꡬν(μ¬κ·ν¨μ)
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(μ°Ύκ³ μ νλ λ¬Έμμ΄)μ μ
λ ₯ λ°κΈ°
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)
μ΄μ§ νμμ ν λ² ν λλ§λ€ νμΈνλ μμμ κ°μκ° μ λ°μ© μ€μ΄λ λ€.
-> μκ° λ³΅μ‘λ O(logN)
μ΄μ§ νμ νΈλ¦¬
μΌμͺ½ μμ λ Έλ < λΆλͺ¨ λ Έλ < μ€λ₯Έμͺ½ μμ λ Έλ κ° μ±λ¦½ν΄μΌ ν¨
μ μ μν
λ£¨νΈ -> μΌμͺ½ -> μ€λ₯Έμͺ½
def preorder(self):
def preorder(root):
if root is None:
pass
else:
print(root.data)
preorder(root.left)
preorder(root.right)
preorder(self.root)
μ€μ μν
μΌμͺ½ -> λ£¨νΈ -> μ€λ₯Έμͺ½
def inorder(self):
def inorder(root):
if root is None:
pass
else:
inorder(root.left)
print(root.data)
inorder(root.right)
inorder(self.root)
νμ μν
μΌμͺ½ -> μ€λ₯Έμͺ½ -> 루νΈ
def postorder(self):
def postorder(root):
if root is None:
pass
else:
postorder(root.left)
postorder(root.right)
print(root.data)
postorder(self.root)
728x90