📍 리스트에서 순차 탐색으로 C
를 찾는 과정
def sequential_search(n, target, array):
# 각 원소를 하나씩 확인
for i in range(n):
# 찾고자 하는 원소와 동일한 경우
if array[i] == target:
return i + 1 # 현재의 위치 반환( 인덱스는 0부터 시작하므로 1 더하기 )
print('생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요. ')
input_data = input().split()
n = int(input_data[0])
target = input_data[1]
print('앞서 적은 원소 개수만큼 문자열을 입력하세요. 구분은 띄어쓰기 한칸으로 합니다. ')
array = input().split()
print(sequential_search(n, target, array))
~~>
생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요.
5 Dongbin
앞서 적은 원소 개수만큼 문자열을 입력하세요. 구분은 띄어쓰기 한 칸으로 합니다.
Hanul Jonggu Dongbin Taeil Sangwook
3
📍 리스트에서 원소 값 4
를 찾는 과정
8
이 찾으려는 값 보다 크기 때문에 중간점 이후의 값은 확인 할 필요가 없다2
가 찾으려는 값 보다 작기 때문에 시작점을 중간점 앞 위치로 재설정 후 반복4
와 일치하므로 탐색을 종료📍 재귀 함수로 구현한 이진 탐색 소스코드
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()))
result = binary_search(array, target, 0, n-1)
if result == None:
print('원소가 존재하지 않습니다.')
else:
print(result + 1)
~~>
# 1
10 7
1 3 5 7 9 11 13 15 17 19
4
# 2
10 7
1 3 5 6 9 11 13 15 17 19
원소가 존재하지 않습니다.
~~>
📍 반복문으로 구현한 이진 탐색 소스코드
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 = 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)
- 부모 노드보다 왼쪽 자식 노드가 작다
- 부모 노드보다 오른쪽 자식 노드가 크다
👉 왼쪽 자식 노드 < 부모 노드 < 오른쪽 자식 노드
📍 찾는 원소가 37일 때 동작하는 과정
30
이고 찾는 원소값이 37
이기 때문에 왼쪽 노드는 확인할 필요가 없다48
이 부모 노드가 되었을 때 찾는 원소값 37
은 부모노드 보다 작기 때문에 왼쪽노드를 확인한다37
과 일치하기 때문에 탐색을 마친다