탐색과정에서 브루트 포스가 생각보다 많이 걸려서 첫 시도에서 실패했다.
탐색 알고리즘을 이진탐색으로 수정하여 해결했고, 메모리 사용량이 다른 풀이보다 더 많이 나왔다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void input_data(/*vector<int>& A, */vector<int>& B, vector<int>&question)
{
int N, M;
int i, temp;
cin >> N >> M;
for (i = 0; i < N; i++)
{
cin >> temp;
//A.push_back(temp);
B.push_back(temp);
}
sort(B.begin(), B.end());
for (i = 0; i < M; i++)
{
cin >> temp;
question.push_back(temp);
}
return;
}
void find_answer(/*vector<int>& A, */vector<int>& B, vector<int>& question)
{
int i, j;
int current_question;
int left, right, mid, idx;
/*for (i = 0; i < question.size(); i++)
{
current_question = question[i];
find = false;
for (j = 0; j < B.size(); j++)
{
if (current_question == B[j])
{
find = true;
break;
}
}
if (find)
{
cout << j << "\n";
}
else
{
cout << "-1\n";
}
}*/
for (i = 0; i < question.size(); i++)
{
idx = -1;
current_question = question[i];
left = 0; right = B.size() - 1;
while (left <= right)
{
mid = (left + right) / 2;
if (B[mid] > current_question)
{
right = mid - 1;
}
else if (B[mid] == current_question)
{
idx = mid;
right = mid - 1;
}
else
{
left = mid + 1;
}
}
cout << idx << "\n";
}
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
//vector<int> A;
vector<int> B;
vector<int> question;
input_data(/*A, */B, question);
find_answer(/*A, */B, question);
return 0;
}