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안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.

www.acmicpc.net

1920을 풀면서 맞는 것 같은데 계속 시간 오류가 떠서 찾아보았더니
cin 속도 문제였고
ios_base::sync_with_stdio(0);cin.tie(0); 을 넣어서 해결하였다.

대회와 같이 속도가 필요하다면 scanf, printf를 사용하는 것이 좋을 수 있다.

#include <iostream>
#include <algorithm>

using namespace std;

int N,M;
int arr[100010];

void binarySearch(int key){
    int start = 0;
    int end = N-1;
    int mid;

    while(end>=start){
        mid =(start+end)/2;
        if(arr[mid]==key){
            cout<<1<<"\n";
            return;
        }else if(arr[mid]>key){
            end = mid - 1;
        }else{
            start = mid + 1;
        }
    }
    cout<<0<<"\n";
    return;
}


int main(){
    
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>N;
    int temp;

    for(int i=0;i<N;i++){
        cin>>temp;
        arr[i]=temp;
    }

    sort(arr,arr+N);

    cin>>M;
    for(int i=0;i<M;i++){
        cin>>temp;
        binarySearch(temp);
    }

    return 0;
}

+ Recent posts