https://www.acmicpc.net/problem/10815
숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오.
제출 30000 정답 비율 49%
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
int compare(const void *a, const void *b)
{
return *(int*)a > *(int*)b ? 1 : (*(int*)a < *(int*)b ? -1 : 0);
}
int bin_search(int* arr, int key, int size) {
int front, mid, back;
front = 0; back = size - 1;
while (1) {
mid = (front + back) / 2;
if (arr[mid] == key) return 1;
if (arr[front] == key) return 1;
if (arr[back] == key) return 1;
if (arr[mid] < key)
front = mid + 1;
else
back = mid - 1;
if (back <= front) return 0;
}
}
int main() {
int n = 0, m = 0;
int arr[MAX], arr2[MAX];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d", &arr2[i]);
}
qsort(arr, n, sizeof(int), compare);
for (int i = 0; i < m; i++) {
printf("%d\n", bin_search(arr, arr2[j], n));
}
}