매일 BOJ
(매일 BOJ) C++ 2776번 암기왕
norepinephrine
2025. 7. 27. 22:24
이번 문제는 2776번 암기왕이다.

접근법
주어진 수첩 1의 숫자 리스트에 대해 수첩 2의 각 숫자가 존재하는지를 빠르게 판단해야 한다.
단순한 선형 탐색은 시간 초과되므로, 이분 탐색 또는 해시셋을 사용해야 한다.
알고리즘 설계
- 수첩 1의 숫자들을 오름차순 정렬
- 수첩 2의 각 숫자에 대해 이진 탐색 수행
시간 복잡도
- 정렬: O(N log N)
- M개의 숫자에 대해 각각 O(log N) → 총 O(M log N)
작성코드
# include <bits/stdc++.h>
using namespace std;
int main (void){
ios::sync_with_stdio(0); cin.tie(0);
long long T;
cin >> T;
for (int i = 0; i < T; i++){
long long N;
cin >> N;
vector<int> v1;
for (int j = 0; j < N; j++){
long long num;
cin >> num;
v1.push_back(num);
}
sort(v1.begin(),v1.end());
long long M;
cin >> M;
bool b;
for(int j = 0; j < M; j++){
long long num;
cin >> num;
b = binary_search(v1.begin(),v1.end(),num);
if(b == true) cout << 1 << '\n';
else cout << 0 << '\n';
}
}
}