Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 5582 DP
- 1644 파이썬
- 자료구조
- 1806 투포인터
- 안드로이드 hilt
- 1806 백준
- java
- 1806 파이썬
- 1753 파이썬
- 백준 5582
- 투포인터 알고리즘
- 1003 파이썬
- 2096 파이썬
- 자바
- Android mvp
- 백준 1644
- git local remote
- 백준 10819
- 10819 파이썬
- 백준 2096
- Android Room
- android hilt
- 1753 다익스트라
- 이진 탐색
- 코루틴 플로우
- flow buffering
- Coroutine Flow
- 6588 파이썬
- Jetpack Room
- 5582 파이썬
Archives
- Today
- Total
Gemstone's Devlog
[알고리즘] 이진 탐색 정리 본문
1. 재귀 함수로 구현한 이진 탐색 소스코드
# 이진 탐색 소스코드 구현(재귀 함수)
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)
2. 반복문으로 구현한 이진 탐색 소스코드
# 이진 탐색 소스코드 구현(반복문)
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(찾고자 하는 문자열)을 입력받기
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)
이진탐색
탐색 범위가 2,000만을 넘어가면 이진 탐색으로 문제에 접근하는 것이 좋다.
처리해야 할 데이터의 개수나 값이 1,000만 단위 이상으로 넘어가면 이진 탐색과 같이 O(logN)의 속도를 내야 하는 알고리즘을 떠올려야 문제를 풀 수 있는 경우가 많다!
'Data Structure & Algorithms' 카테고리의 다른 글
[백준] 1463번: 1로 만들기 (다이나믹 프로그래밍) (0) | 2022.02.27 |
---|---|
[이것이 코딩테스트다] 떡볶이 떡 만들기 (0) | 2022.02.26 |
[알고리즘] 퀵 정렬 정리 (+ 계수 정렬) (0) | 2022.02.24 |
[이것이 코딩테스트다] 게임 개발 (0) | 2022.01.30 |
[백준] 11000번: 강의실 배정 (우선순위 큐) (0) | 2022.01.28 |