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

내가 가지고 있는 카드와 주어진 카드를 비교해서 있는지 없는지 확인하면 된다
만약 for문을 돌려 처음부터 끝까지 확인하면 시간복잡도가 O(nm)이 나오므로 최대 n, m = 500,000일 때 최악의 경우 250억 번 비교가 발생한다.. 대신 이진 탐색 트리 기반인 set을 사용하게 되면 find() 연산이 평균/최악 모두 O(log n)으로 개선할 수 있다.
#include <iostream>
#include <set>
using namespace std;
int n, m;
set<int> mycard;
int checkcard[500000];
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
int k;
cin >> k;
mycard.insert(k);
}
cin >> m;
for (int i = 0; i < m; i++)
{
cin >> checkcard[i];
}
for (int i = 0; i < m; i++)
{
auto it = mycard.find(checkcard[i]);
if (it != mycard.end())
cout
<< "1 ";
else
cout << "0 ";
}
}'알고리즘 > KOALA 알고리즘 스터디' 카테고리의 다른 글
| [프로그래머스] 구명보트 C++ (0) | 2025.10.05 |
|---|---|
| [BOJ/C++] 2775 부녀회장이 될테야 (0) | 2025.06.01 |
| [BOJ/C++] 1427 소트인사이드 (0) | 2025.05.15 |
| [BOJ/C++] 28279번 덱 2 (0) | 2025.05.11 |
| [BOJ/C++] 17298번 오큰수 (0) | 2025.05.02 |