본문 바로가기
Algorithm(BOJ, C)/Binary search

[백준_1920] 수 찾기 c

by kurooru 2025. 2. 1.
문제

풀이
#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;
}