목차
출처
개념
특징
로직
예제문제
출처
개념
- 탐색 범위를 절반씩 좁히며 데이터 탐색
- 범위 설정 : 시작점, 끝점, 중간점(소수점 이하 제거) 이용
- 조건 : 정렬 완료된 상태
시간 복잡도
$ O\left ( log(N) \right ) $
구현
#include <iostream>
#include <vector>
using namespace std;
// 오름차순된 리스트
vector<int> v = { 1, 2, 3, 4, 5 };
// target 찾기
int binarySearch(int target, int start, int end) {
while (start <= end) {
// 중간값 : 소수점 버리기
int mid = (start + end) / 2;
// 찾으면 인덱스 반환
if (v[mid] == target) return mid;
// target이 중간값보다 작으면, 중간값보다 왼쪽(더 작은 쪽)을 탐색
else if (v[mid] > target) end = mid - 1;
// target이 중간값보다 크면, 중간값보다 오른쪽(더 큰 쪽)을 탐색
else start = mid + 1;
}
return -1; // 못 찾을 때
}
int main() {
int target = 3;
int start = 0, end = v.size() - 1;
int result = binarySearch(target, start, end);
if (result == -1) cout << "존재하지 않음";
else cout << "v[" << result << "] = " << target;
return 0;
}
예제 문제
[백준]
'알고리즘 문제풀이 > 이것이코딩테스트다' 카테고리의 다른 글
[이코테/C++] 6. 다이나믹 프로그래밍 / 동적 계획법 / Dynamic Programming (0) | 2024.04.29 |
---|---|
[이코테/C++] 3. DFS & BFS (1) | 2023.10.15 |
[이코테/C++] 7. 최단 경로 알고리즘 (0) | 2023.10.09 |