백준 14425 c++

magicdrill·2024년 4월 9일
0

백준 문제풀이

목록 보기
279/655

백준 14425 c++

#include <iostream>
#include <algorithm>

using namespace std;

int input(int lower, int upper);
void input_string(string* str, int num);
void sort_string(string* str, int num);
void check_how_many_word(string* str_N, int N, string* str_M, int M);
bool binary_search_string(string* string_array, int num, string word);

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, M;
	string *str_N;
	string* str_M;

	N = input(1, 10000);
	M = input(1, 10000);
	str_N = new string[N];
	str_M = new string[M];
	input_string(str_N, N);
	input_string(str_M, M);
	sort_string(str_N, N);
	check_how_many_word(str_N, N, str_M, M);

	delete[] str_N;
	delete[] str_M;

	return 0;
}

int input(int lower, int upper)
{
	int A;

	while (1)
	{
		cin >> A;
		if (A >= lower && A <= upper)
		{
			break;
		}
		else
		{
			;
		}
	}

	return A;
}

void input_string(string* str, int num)
{
	int i;
	string temp;
	
	for (i = 0; i < num; i++)
	{
		cin >> temp;
		if (temp.length() > 500)
		{
			i--;
		}
		else
		{
			str[i] = temp;
		}
	}

	return;
}

void sort_string(string* str, int num)
{
	sort(str, str + num);

	return;
}

void check_how_many_word(string* str_N, int N, string *str_M, int M)
{
	int i, count = 0;

	for (i = 0; i < M; i++)
	{
		if (binary_search_string(str_N, N, str_M[i]) == true)
		{
			count++;
		}
		else
		{
			;
		}
	}

	cout << count << '\n';

	return;
}

bool binary_search_string(string* string_array, int num, string word)
{
	int start = 0;
	int end = num - 1;
	int middle;
	bool result = 0;

	while (end - start >= 0)
	{
		middle = (start + end) / 2;
		if (string_array[middle] == word)
		{
			result = 1;
			break;
		}
		else if (string_array[middle] > word)
		{
			end = middle - 1;
		}
		else
		{
			start = middle + 1;
		}
	}

	return result;
}

0개의 댓글