일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 포탑부수기
- 토끼와 경주
- ARM
- ISER
- dfs
- 3Dreconstruction
- ICER
- 루돌프의반란
- 조합
- 싸움땅
- 코드트리빵
- 구현
- DP
- DenseDepth
- 슈퍼컴퓨터클러스터
- Calibration
- ros
- 삼성기출
- 코드트리
- 백준
- 이진탐색
- 시뮬레이션
- 소프티어
- 수영대회결승전
- 마이크로프로세서
- 나무박멸
- BFS
- 순서대로방문하기
- 마법의숲탐색
- 왕실의기사대결
Archives
- Today
- Total
from palette import colorful_colors
[알고리즘 with Python] - 이진탐색 본문
참고서적: 이것이 취업을 위한 코딩테스트다 with python - 나동빈
up down 게임처럼 탐색범위를 반으로 쪼개면서 탐색하는 알고리즘. 따라서 시간복잡도는 O(logN)이다.
배열 내부 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘이다.
처리해야 할 데이터 개수나 값이 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)
# 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)
'알고리즘 > 알고리즘 with 파이썬' 카테고리의 다른 글
[알고리즘 with 파이썬] - 최단거리(다익스트라, 플로이드 워셜) (0) | 2023.09.22 |
---|---|
[알고리즘 with 파이썬] - DP(다이나믹 프로그래밍) (0) | 2023.09.21 |
[알고리즘 with Python] - 정렬 (0) | 2023.05.21 |
[알고리즘 with Python] - DFS, BFS (0) | 2023.05.18 |
[알고리즘 with Python] - 입출력, 자료구조 (0) | 2023.04.30 |