문제 링크 : 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개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.

www.acmicpc.net

 문제 설명 

 

n개의 정수가 주어지고 그다음 m개의 정수가 주어지는데

m개의 정수가 순서대로 n개의 정수중에 포함 되있으면 1 아니면 0출력 하면된다 . 줄바꿈 출력 주의.

 

알고 리즘

 

이분탐색으로 찾으면됨 .

먼저 n개의 정수를 정렬한뒤

lo = 0 , hi = n-1 로 지정하고 while문으로 이분탐색진행 하면된다.

 

 코드 

 

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
40
41
42
43
44
45
#include<iostream>
#include<algorithm>
using namespace std;
 
int main() {
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
    int N, M;
    int arr[100001];
 
 
    cin >> N;
    for (int i = 0; i < N; i++)
        cin >> arr[i];
 
    sort(arr, arr + N);
    cin >> M;
    for (int i = 0; i < M; i++) {
        int num;
        cin >> num;
        int lo = 0;
        int hi = N - 1;
        bool pos = false;
 
        while (lo <= hi) {
            int mid = (lo + hi) / 2;
 
            if (num == arr[mid]) {
                pos = true;
                cout << 1;
                break;
            }
            else if (num < arr[mid]) hi = mid - 1;
            else lo = mid + 1;
 
        }
        if (!pos) cout << 0;
        cout << "\n";
 
    }
 
    return 0;
 
 
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

 

'c++ > 백준' 카테고리의 다른 글

백준 2661번 : 좋은수열  (0) 2020.04.17
백준 9663번 : N-Queen  (0) 2020.04.17
백준 6236번: 용돈 관리  (0) 2020.04.16
백준 1992번: 쿼드트리  (0) 2020.04.16
백준 1759번 : 암호만들기  (0) 2020.04.16
ariz1623