개념
오름차순으로 정렬된 리스트에서 특정한 값을 찾는 알고리즘입니다
의사코드
BinarySearch(A[0..N-1], value, low, high) {
if (high <= low)
return -1 // not found
mid = (low + high) / 2
if (A[mid] > value)
return BinarySearch(A, value, low, mid-1)
else if (A[mid] < value)
return BinarySearch(A, value, mid+1, high)
else
return mid // found
}
BinarySearch(정렬된 배열, 찾을 값, 배열의 첫 인덱스, 배열의 마지막 인덱스)
를 통해 이진 탐색을 수행할 수 있습니다
활용
그러면 해당 알고리즘을 코테 문제에 어떻게 적용할 수 있는지 생각해 보겠습니다.
https://www.acmicpc.net/problem/1300
https://www.acmicpc.net/problem/1939
제가 푼 위의 문제들 같은 경우 정렬된 숫자 배열을 탐색하는 것처럼
답의 범위가 정해져 있고
특정 답을 확인한 후 답이 될 수 있는 범위를 좁혀 나갈 수 있어
이진 탐색을 적용할 수 있습니다.
즉, 답의 전체 범위를 배열로 잡고 이진탐색을 통해 답을 빠르게 찾을 수 있습니다.
Reference
'CS > 알고리즘 개념' 카테고리의 다른 글
세그먼트 트리(Segment Tree) (0) | 2021.07.31 |
---|---|
Union-Find (0) | 2021.07.16 |
배낭 문제(Knapsack Problem) (0) | 2021.05.18 |
가장 긴 증가하는 부분 수열(LIS) (0) | 2021.05.15 |
수학 (0) | 2020.10.24 |