백준 10815 c++

magicdrill·2024년 3월 27일

백준 문제풀이

목록 보기
215/675

백준 10815 c++

#include <iostream>
#include <algorithm>

using namespace std;

int input(int lower, int upper);
void input_array(int* array, int size);
void sort_array(int* array, int size);
void check_card(int* card, int card_size, int* expect, int expect_size);
bool binary_search(int* card, int len, int target);

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

	int N, M;
	int* card;
	int* expect;

	N = input(1, 500000);
	card = new int[N];
	input_array(card, N);
	sort_array(card, N); // card 배열이 정렬됨
	M = input(1, 500000);
	expect = new int[M];
	input_array(expect, M);
	check_card(card, N, expect, M);

	delete[] card;
	delete[] expect;

	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_array(int *array, int size)
{
	int i;

	for (i = 0; i < size; i++)
	{
		array[i] = input(-10000000, 10000000);
	}

	return;
}

void sort_array(int* array, int size)
{
	sort(array, array + size);

	return;
}

void check_card(int* card, int card_size, int* expect, int expect_size)
{
	int i;
	for (i = 0; i < expect_size; i++)
	{
		cout << binary_search(card, card_size, expect[i]) << " ";
	}

	return;
}

bool binary_search(int *card, int len, int target)//정렬된 card, 찾는 수, 
{
	int first = 0;
	int end = len - 1;
	int middle;// = (first + end) / 2;
	bool result = 0;

	while (end - first >=  0)
	{
		middle = (first + end) / 2;
		if (card[middle] == target) //target값과 같은 경우 
		{
			result = 1;
			break;

		}
		else if (card[middle] > target)//target보다 작은경우
		{
			end = middle - 1;
		}
		else //target보다 큰 경우
		{
			first = middle + 1;
		}
	}

	return result;
}

0개의 댓글