백준 20551 c++

magicdrill·2024년 8월 15일

백준 문제풀이

목록 보기
418/673

백준 20551 c++

탐색과정에서 브루트 포스가 생각보다 많이 걸려서 첫 시도에서 실패했다.
탐색 알고리즘을 이진탐색으로 수정하여 해결했고, 메모리 사용량이 다른 풀이보다 더 많이 나왔다.

#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;
}

0개의 댓글