문제
풀이
#include <stdio.h>
#include <stdlib.h>
#define EXIT_SUCCESS 0
#define FOUND 1
#define NOT_FOUND 0
int binary_search(int* target_list, int search_len, int target)
{
int left = 0, right = search_len - 1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (target_list[mid] == target) {
return FOUND;
} else if (target_list[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return NOT_FOUND;
}
int compare(const void* a, const void* b) {
int x = *(int*)a;
int y = *(int*)b;
return (x > y) - (x < y);
}
int main(void)
{
// 0) 입력
int n, m;
scanf("%d", &n);
int* search_list = (int* )malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) {
scanf("%d", &search_list[i]);
}
scanf("%d", &m);
int* target_list = (int* )malloc(sizeof(int) * m);
for (int i = 0; i < m; i++) {
scanf("%d", &target_list[i]);
}
// 1) search_list 정렬
qsort(search_list, n, sizeof(int), compare);
// 2) 이분 탐색
int target_result;
for (int i = 0; i < m; i++) {
target_result = binary_search(search_list, n, target_list[i]);
printf("%d\n", target_result);
}
// 3) 메모리 해제
free(target_list);
free(search_list);
return EXIT_SUCCESS;
}