본문으로 바로가기

백준 01920 - 수 찾기

category BOJ 백준/기타 2020. 11. 17. 17:57

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

 

1920번: 수 찾기

첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안

www.acmicpc.net

 

고려사항

  • 이분 탐색.
  • 모든 수를 벡터에 담아서 알고리즘 헤더에 있는 sort 함수를 사용한다.
    sort 함수가 퀵소트 기반으로 구현되어 있으니 정렬이 빠르게 된다!
  • 수가 있는지를 판별할 때에는 정렬된 벡터에서 이분탐색을 실시!

 

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

int search(vector<int> &v, int target){
    int left = 0;
    int right = v.size();
    int mid;

    while(left <= right){
        mid = (left + right) / 2;

        if(v[mid] == target){
            return 1;
        }

        if(v[mid] < target){
            left = mid + 1;
        }else{
            right = mid - 1;
        }
    }

    return 0;
}

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

    vector<int> v;
    int n, m, tmp;

    cin>>n;
    for(int i=0;i<n;++i){
        cin>>tmp;
        v.push_back(tmp);
    }

    sort(v.begin(), v.end());
    cin>>m;
    for(int i=0;i<m;++i){
        cin>>tmp;
        cout<<search(v, tmp)<<"\n";
    }

    return 0;
}

'BOJ 백준 > 기타' 카테고리의 다른 글

백준 02751 - 수 정렬하기 2  (0) 2020.11.20
백준 02750 - 수 정렬하기  (0) 2020.11.18
백준 15654 - N과 M (5)  (0) 2020.11.16
백준 07662 - 이중 우선순위 큐  (0) 2020.11.12
백준 02749 - 피보나치 수 3  (0) 2020.11.11