백준 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;
}