숫자 찾기 (이진탐색)

exsoul·2022년 6월 15일
0

문제 설명


오름차순의 순서대로 정렬되어 있는 N개의 데이터에서 특정한 숫자가 몇 번째 위치에 있는지를 알아내는 프로그램을 작성하시오.

입력 설명


첫 번째 줄에 N(1≤N≤50,000)이 주어진다. N은 정렬되어 주어지는 데이터의 수이다.
두 번째 줄에는 N개의 서로 다른 수가 정렬되어 주어진다. 각 수는 공백 하나로 분리되어 주어진다.
세 번째 줄에는 데이터에서 찾아야 할 특정한 수의 개수 T(1≤T≤10,000)가 주어진다. 즉, T가 3이면 3개의 수를 정렬된 데이터에서 찾아야 한다.
네 번째 줄에는 T개의 수가 공백 하나로 분리되어 주어진다.

출력 설명


찾아야 할 수가 정렬되어 주어진 데이터의 수 중에서 앞에서부터 몇 번째에 있는지 그 위치를 출력한다. 첫 번째 위치는 1이다. 만약, 찾으려는 수가 주어지는 데이터에 존재하지 않는다면, 0을 출력한다.

입력 예시


7
2 4 9 10 14 23 32
3
6 23 9

출력 예시


0
6
3

#include <stdio.h>
#define MAXN ((int)5e4)
#define MAXT ((int)1e4)
int N;
int A[MAXN+10];
int T;
int B[MAXT+10];
 
int BinarySearch(int s, int e, int d){
    while (s<=e){
        int m = (s+e)/2;
        if (A[m] == d) {
            return m;
        }
        else if (A[m] > d) {
            e = m-1;
        }
        else{
            s = m+1;
        }
    }
    return 0;
}
 
void Solve(void){
    for (int i=0; i<T; i++){
        B[i] = BinarySearch(0, N-1, B[i]);
    }
}
 
void InputData(void){
    scanf("%d", &N);
    for(int i=1 ; i<=N ; i++){
        scanf("%d", &A[i]);
    }
    scanf("%d", &T);
    for(int i=0 ; i<T ; i++){
        scanf("%d", &B[i]);
    }
}
void OutputData(void){
    for(int i=0; i<T ; i++){
        printf("%d\n", B[i]);
    }
}
int main(void){
    InputData();// 입력받는 부분
 
    Solve();// 여기서부터 작성
 
    OutputData();// 출력하는 부분
    return 0;
}
profile
ocho

0개의 댓글