본문 바로가기
알고리즘, 자료구조/알고리즘

[이진탐색] 1920 수 찾기, Binary search

by Wordbe 2019. 8. 29.
728x90

 

Binary search는

 

'정렬된 배열'에서 특정 원소를 찾을 때,

 

O(logN)의 탐색시간을 보장합니다.

 

 

따라서, O(N)만큼 걸리는 Linear search 보다는 성능이 좋을 수 있습니다.

 

처음에는 재귀함수로 구현하였고,

이와 거의 비슷하게 반복문으로 구현할 수 있었습니다.

 

#include <cstdio>
#include <algorithm>

int a[100001];

// array는 정렬되어 있어야 함.
int binarySearch(int first, int last, int k){
    int mid = (first + last) / 2;
    if (first > last) return -1;
    else {
        if (a[mid] == k) return mid;
        else {
            if (a[mid] < k){
                binarySearch(mid + 1, last, k);
            }
            else{
                binarySearch(first, mid - 1, k);
            }
        }
    }

}

// 반복문이 조금 더 빠르다. 
int binarySearchIter(int length, int key){
    int first = 0;
    int last = length - 1;

    while(first <= last){
        int mid = (first + last) / 2;
        if (a[mid] == key) return mid;
        else {
            if (a[mid] < key){
                first = mid + 1;
            }
            else {
                last = mid - 1;
            }
        }
    }
    return -1;
}

int main() {
    int n, m, k;
    scanf("%d", &n);
    for (int i=0; i<n; i++){
        scanf("%d", &a[i]);
    }
    std::sort(a, a + n);

    scanf("%d", &m);
    for (int i=0; i<m; i++){
        scanf("%d", &k);
        if (binarySearchIter(n, k) == -1) printf("0\n");
        else printf("1\n");
    }


    return 0;
}
728x90

'알고리즘, 자료구조 > 알고리즘' 카테고리의 다른 글

[BFS] 2206 벽 부수고 이동하기  (0) 2019.09.12
[백준] 1694 숨바꼭질  (0) 2019.09.12
[Deque] 5430 AC (백준)  (0) 2019.08.28
[Deque] 1021 회전하는 큐  (0) 2019.08.27
[Queue] 19.5 외계 신호 분석  (0) 2019.08.27

댓글