Date:

1) 문제 링크

https://www.acmicpc.net/problem/1920

2) 접근

이진 탐색을 구현해야 O(NlogM)으로 빨리 끝내버릴 수 있겠다고 생각했다. 그래서 입력받은 정수들을 오름차 순으로 정렬한 뒤 BinarySearch(num) 함수를 만들어 이진탐색을 돌렸다.

3) 풀이

#include <iostream>
#include <algorithm>
using namespace std;

int N, M;
int key;
long long A[100001];

// 이진탐색 함수
int BinarySearch(int num){
    int s=0, e=N-1;
    int mid;

    while(s <= e){
        mid = (s+e) / 2;
        if(num == A[mid]) { return 1; }
        else if(num > A[mid]) { s = mid + 1; }
        else { e = mid - 1; }
    }
    return 0;
}

int main(void){
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> N;

    for(int i=0; i<N; ++i){ cin >> A[i]; }
    sort(A, A+N);

    cin >> M;

    for(int i=0; i<M; ++i){
        cin >> key;
        cout << BinarySearch(key) << '\n';
    }

    return 0;
}

4) 피드백

처음 이 글을 작성했을 당시(올해 2월? 쯤)에는 이진탐색을 외워야겠다는 생각만 하고 있었다. 물론 외워서 활용할 줄 아는 것도 필수적이긴 하지만… <algorithm> 헤더에 lower_bound(), upper_bound() 함수가 있다는 것도 기억하도록 하자.

Leave a comment