문제 출처 : https://www.acmicpc.net/problem/10815

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이가 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이

www.acmicpc.net

이번 문제는 앞서 공부했던 이분 탐색을 이용하여 풀었다.

맨 처음 sort stl을 사용하여 정렬 한 뒤 이분 탐색으로 검색하여 답을 해결했다. 

아래는 해당 문제에 대해 생각한 소스이다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<stdio.h>
#include<algorithm>
#pragma warning(disable:4996)
using namespace std;
int arr[500001];
bool BinarySearch(int start,int end,int value)
{
    if (start > end)
        return false;
    int pivot = (start + end/ 2;
    if (arr[pivot] == value)
        return true;
    else
    {
        if (arr[pivot] > value)
            return BinarySearch(start, pivot - 1, value);
        else
            return BinarySearch(pivot + 1end, value);
    }
}
int main()
{
    int N;
    int num;
    int value;
    scanf("%d"&N);
    for (int i = 0; i < N; i++)
        scanf("%d"&arr[i]);
    sort(arr, arr + N);
    scanf("%d"&num);
    for (int i = 0; i < num; i++)
    {
        scanf("%d"&value);
        if (BinarySearch(0, N, value))
            printf("1 ");
        else
            printf("0 ");
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
블로그 이미지

뀨심볼

깃허브 주소는 : https://github.com/hhyc2 입니다~

,