πŸ’»

[λ°±μ€€] 이뢄 탐색 - 1920. 수 μ°ΎκΈ° λ³Έλ¬Έ

μ•Œκ³ λ¦¬μ¦˜/λ¬Έμ œν’€μ΄ Baekjoon

[λ°±μ€€] 이뢄 탐색 - 1920. 수 μ°ΎκΈ°

λ˜νš¨λ‹ˆ 2020. 2. 4. 23:03

문제

N개의 μ •μˆ˜ A[1], A[2], …, A[N]이 μ£Όμ–΄μ Έ μžˆμ„ λ•Œ, 이 μ•ˆμ— XλΌλŠ” μ •μˆ˜κ°€ μ‘΄μž¬ν•˜λŠ”μ§€ μ•Œμ•„λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

첫째 쀄에 μžμ—°μˆ˜ N(1≤N≤100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” N개의 μ •μˆ˜ A[1], A[2], …, A[N]이 주어진닀. λ‹€μŒ μ€„μ—λŠ” M(1≤M≤100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” M개의 μˆ˜λ“€μ΄ μ£Όμ–΄μ§€λŠ”λ°, 이 μˆ˜λ“€μ΄ Aμ•ˆμ— μ‘΄μž¬ν•˜λŠ”μ§€ μ•Œμ•„λ‚΄λ©΄ λœλ‹€. λͺ¨λ“  μ •μˆ˜λ“€μ˜ λ²”μœ„λŠ” int 둜 ν•œλ‹€.

 

좜λ ₯

M개의 쀄에 닡을 좜λ ₯ν•œλ‹€. μ‘΄μž¬ν•˜λ©΄ 1을, μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ 0을 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯1

5
4 1 5 2 3
5
1 3 7 9 5

 

예제 좜λ ₯1

1
1
0
0
1

 

생각

μ²˜μŒμ—λŠ” λ‹¨μˆœν•˜κ²Œ ν•˜λ‚˜μ”© μž…λ ₯받은 수λ₯Ό λ°°μ—΄μ—μ„œ μžˆλŠ”μ§€ μ²΄ν¬ν•΄μ„œ 있으면 trueλ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ„œ κ°„λ‹¨ν•˜κ²Œ ν’€μ—ˆλ‹€. ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ ν’€λ©΄ 예제 λ‹΅μ•ˆμ€ λ‚˜μ˜¬μ§€λΌλ„ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ‚˜μ„œ μ‹€νŒ¨ν•˜κ²Œ λœλ‹€. 

이뢄 탐색(ν˜Ήμ€ 이진탐색)을 μ΄μš©ν•˜λ©΄ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό O(logN)둜 쀄일 수 μžˆλ‹€. 단, μ—¬κΈ°μ„œ 주의 ν•  점은 이진 탐색을 μ‚¬μš©ν•˜λŠ” 경우 정렬이 λ˜μ–΄ μžˆμ–΄μ•Όν•œλ‹€λŠ” 것! 

 

μž‘μ„±ν•œ μ½”λ“œ

#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 100000

int arr[MAX];
int n,m;
bool check = false;

void BinarySearch(int key){
    int first = 0;
    int last = n-1;
    int mid = 0;

    while(first <= last){
        mid = (first+last)/2;
        if(arr[mid] == key){
            check = true;
            return;
        }else if(arr[mid] > key){
            last = mid -1;
        }else{
            first = mid +1;
        }
    }
    check = false;
    return;
}
int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int num;
    
    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++){
        cin >> num;
        BinarySearch(num);
        
        if(check){
            cout << 1 << "\n";
        }else{
            cout << 0 << "\n";
        }
    }
    return 0;
}
λ°˜μ‘ν˜•
Comments