Algorithm/BOJ

백준 1920번 C++

poopooreum 2023. 8. 2. 20:57
반응형
백준 1920번 수 찾기

https://www.acmicpc.net/problem/1920

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net



정답 코드

#include <stdio.h>
#include <stdlib.h>

int static compare(const void* first, const void* second) {
    if (*(int*)first > *(int*)second) return 1;
    else if (*(int*)first < *(int*)second) return -1;
    else return 0;
}
void result(int *arr, int n, int x) {
    int min = 0, max = n - 1;
    while (min <= max) {
        int mid = (min + max) / 2;
        if (arr[mid] == x) {
            printf("%d\n", 1);
            return;
        }
        else if (arr[mid] > x) max = mid - 1;
        else min = mid + 1;
    }
    printf("%d\n", 0);
    return;
}
int main() {
    int n, m, num;
    scanf("%d", &n);
    int *arr= (int*)malloc(sizeof(int) * n);
    for (int i = 0; i < n; i++) scanf("%d", &arr[i]);
    qsort(arr, n, sizeof(int), compare);
    scanf("%d", &m);
    for (int i = 0; i < m; i++) {
        scanf("%d", &num);
        result(arr,n,num);
    }
    return 0;
}

문제 풀이

이분 탐색을 이용해서 풀 수 있는 문제입니다. 메모리는 malloc함수를 이용해서 동적으로 할당을 하였고 qsort를 사용할 때 compare함수를 인위적으로 수정하였습니다.

반응형