매일 BOJ

(매일 BOJ) C++ 10815번 숫자카드

norepinephrine 2025. 7. 25. 22:54

이번 문제는 10815번 숫자카드 이다.

접근법

최대로 상근이가 가지고 있는 숫자카드의 개수가 500,000개  판별해야 할 숫자카드의 개수가 500,000개이기에 이를 브루트포스로 푼다면 250억번의 연산이 필요하게 된다. 따라서 이를 해결하기 위해 상근이가 가지고 있는 숫자카드를 정렬한 후 알고리즘 라이브러리의 바이너리 함수을 통해 이분탐색으로 해당하는 값이 있는지 없는지를 판별한다면 TLE가 발생하지 않고 문제를 해결할 수 있다.

작성코드

# include <bits/stdc++.h>
using namespace std;

int main (void){
    ios::sync_with_stdio(0); cin.tie(0);
    int N;
    cin >> N;
    vector<int> v1;
    vector<int> v2;
    for (int i = 0; i < N; i++){
        int num;
        cin >> num;
        v1.push_back(num);
    } 
    
    sort(v1.begin(),v1.end());
    int M;
    cin >> M;
    bool b;

    for (int j = 0; j < M; j++){
        int num;
        cin >> num;
        b = binary_search(v1.begin(),v1.end(),num);
        if (b) cout << 1 << ' ';
        else cout << 0 << ' ';
    }
}