🚨 β€˜μ΄κ²ƒμ΄ 취업을 μœ„ν•œ μ½”λ”©ν…ŒμŠ€νŠΈλ‹€β€™ ꡐ재 정리

이진탐색

이진탐색은 λ°μ΄ν„°μ˜ 크기가 클 λ•Œ 효율적인 탐색 μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. ν•œλ²ˆ 탐색 ν•  λ•Œ λ§ˆλ‹€ 탐색 λ²”μœ„λ₯Ό 반 μ”© μ€„μ—¬λ‚˜κ°€λ©΄μ„œ 값을 μ°ΎκΈ° λ•Œλ¬Έμ— 속도가 맀우 λΉ λ₯΄λ‹€.

이진탐색은 μ •λ ¬λœ μžλ£Œμ— λŒ€ν•΄μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλ‹€. μ½”λ”©ν…ŒμŠ€νŠΈμ— 자주 μΆœμ œλ˜λŠ”λ°, λ¬Έμ œμ—μ„œ 탐색해야 ν•  λ°μ΄ν„°μ˜ 양이 1,000만 λ‹¨μœ„ μ΄μƒμœΌλ‘œ λ„˜μ–΄κ°„λ‹€λ©΄ 이진탐색 μ‚¬μš©μ„ κ³ λ €ν•΄λ³΄λŠ” 것이 μ’‹λ‹€. κ·Έ μ•„μ΄λ””μ–΄λ§Œ 생각해내도 λ¬Έμ œν‘ΈλŠ”λ° 도움이 될 것이닀.
자주 μΆœμ œλ˜λŠ” μœ ν˜•μΈ 만큼 μ½”λ“œλ₯Ό 자주 보고 μ™Έμ›Œλ‘λŠ” 것이 μ’‹λ‹€.

원리

이진탐색은 start, end, middle 세가지 값을 μ΄μš©ν•œλ‹€. start와 end μ‚¬μ΄μ˜ 값이 middle 인데, 쀑간값이 찾고자 ν•˜λŠ” target 값보닀 큰 경우, middleκ³Ό end μ‚¬μ΄μ˜ 값듀은 탐색할 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— κ·Έ 뢀뢄을 탐색 λ²”μœ„μ—μ„œ λΉΌλ²„λ¦¬λŠ” 것이닀.

파이썬 μ½”λ“œ

μž¬κ·€ ν•¨μˆ˜ 이용

1
2
3
4
5
6
7
8
9
10
def bin_search(arr, target, start, end):
if start > end:
return None
mid = (start + end) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return bin_search(arr, target, start, mid-1)
else:
return bin_search(arr, target, mid+1, end)

반볡문 이용

1
2
3
4
5
6
7
8
9
10
def bin_search(arr, target):
start, end = 0, len(arr)-1
while start <= end:
mid = (start + end) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
end = mid - 1
else:
start = mid + 1

트리 자료ꡬ쑰

트리 μžλ£Œκ΅¬μ‘°λŠ” 이진탐색과 λΉ„μŠ·ν•œ λ°©μ‹μœΌλ‘œ 자료λ₯Ό νƒμƒ‰ν•œλ‹€. 데이터가 λ§Žμ•„λ„ 탐색 속도가 λΉ λ₯΄κΈ° λ•Œλ¬Έμ— λŒ€λΆ€λΆ„μ˜ 파일 μ‹œμŠ€ν…œμ΄ 트리 자료ꡬ쑰둜 κ΅¬μ„±λ˜μ–΄μžˆλ‹€.
트리 μžλ£Œκ΅¬μ‘°λŠ” λ…Έλ“œμ™€ κ°„μ„ μœΌλ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€.
tree structure

이진 탐색 트리

이진 탐색 νŠΈλ¦¬λž€ 이진 탐색이 λ™μž‘ ν•  수 μžˆλ„λ‘ κ³ μ•ˆλœ 효율적 탐색이 κ°€λŠ₯ν•œ μžλ£Œκ΅¬μ‘°μ΄λ‹€. 이진 탐색 νŠΈλ¦¬κ°€ 되기 μœ„ν•΄μ„œλŠ” μ•„λž˜ 쑰건을 λ§Œμ‘±ν•΄μ•Ό ν•œλ‹€.

μ™Όμͺ½ μžμ‹ λ…Έλ“œ < λΆ€λͺ¨ λ…Έλ“œ < 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œ

binary search tree

μœ„ κ·Έλ¦Όκ³Ό 같은 νŠΈλ¦¬κ°€ 이진 탐색 νŠΈλ¦¬μ΄λ‹€.

이진 탐색 트리 탐색 방법

μœ„ 이진 탐색 의 원리와 λΉ„μŠ·ν•˜κ²Œ 이진 탐색 트리 λ˜ν•œ 자료ꡬ쑰의 νŠΉμ„±μ„ μ‚¬μš©ν•΄ λΉ λ₯΄κ²Œ 탐색 ν•  수 μžˆλ‹€.

예둜, μœ„ μ‚¬μ§„μ—μ„œ 14λ₯Ό μ°ΎλŠ” 과정을 μ‚΄νŽ΄λ³΄μž.

  1. νƒμƒ‰μ˜ μ‹œμž‘μ€ root μ—μ„œ μ‹œμž‘ν•œλ‹€. 50은 target κ°’ 보닀 크기 λ•Œλ¬Έμ— λ‹€μŒ 탐색 λ…Έλ“œλŠ” μ™Όμͺ½ μžμ‹μ΄ λœλ‹€.
  2. 17은 target κ°’ 보닀 크닀. λ˜λ‹€μ‹œ μ™Όμͺ½ μžμ‹ λ…Έλ“œλ‘œ μ΄λ™ν•œλ‹€.
  3. 12λŠ” target κ°’ 보닀 μž‘λ‹€. λ”°λΌμ„œ 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œλ‘œ μ΄λ™ν•œλ‹€.
  4. target 값인 14λ₯Ό μ°Ύμ•˜λ‹€. 탐색을 μ’…λ£Œν•œλ‹€.

이진 트리 탐색을 μ‚¬μš©μžμ˜ μž…λ ₯을 λ°›μ•„ κ΅¬ν˜„ν•˜λŠ” 것은 많이 μΆœμ œλ˜μ§€ μ•ŠλŠ” νŽΈμ΄λ‹€.

이진탐색 문제

μ•„λž˜ λ¬Έμ œλ“€μ€ μ „ν˜•μ μΈ 이진탐색 λ¬Έμ œλ“€λ‘œ, νŒŒλΌλ©”νŠΈλ¦­ μ„œμΉ˜ μœ ν˜•μ˜ λ¬Έμ œμ΄λ‹€. νŒŒλΌλ©”νŠΈλ¦­ μ„œμΉ˜λž€ μ›ν•˜λŠ” 쑰건을 λ§Œμ‘±ν•˜λŠ” κ°€μž₯ μ•Œλ§žμ€ 값을 μ°ΎλŠ” λ¬Έμ œμ— 주둜 μ‚¬μš©ν•˜λŠ” κΈ°λ²•μœΌλ‘œ, μ΅œμ ν™” 문제λ₯Ό κ²°μ • 문제둜 λ°”κΎΈμ–΄ ν•΄κ²°ν•˜λŠ” 기법이닀.

λ°±μ€€-2805. λ‚˜λ¬΄μžλ₯΄κΈ°
λ°±μ€€-1654. λžœμ„ μžλ₯΄κΈ°
λ°±μ€€-2512. μ˜ˆμ‚°