알고리즘

[이코테/이진탐색/C++] 정렬된 배열에서 특정 수의 개수 구하기(lower_bound, upper_bound 사용)

데메즈 2023. 1. 1. 14:55
728x90
반응형

lower_bound, upper_bound 설명

https://develop-me-z.tistory.com/114

[C++] lower_bound, upper_bound (이진탐색)

헤더파일 #include lower_bound 찾으려는 value 값보다 같거나 큰 숫자가 배열에서 처음 등장하는 위치 리턴 사용 조건 : 탐색을 진행할 배열 또는 벡터가 오름차순 정렬되어 있어야 함 사용법 lower_bound(

develop-me-z.tistory.com

#include <bits/stdc++.h>

using namespace std;

int n, x;
vector<int> v;

//값이 [left_value, right_value]인 데이터의 개수를 반환하는 함수
int countByRange(vector<int>& v, int leftValue, int rightValue){
    vector<int>::iterator rightIndex = upper_bound(v.begin(), v.end(), rightValue);
    vector<int>::iterator leftIndex = lower_bound(v.begin(), v.end(), leftValue);
    return rightIndex - leftIndex;
}

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    // 데이터 개수 n, 찾고자 하는 값 x 입력받기
    cin >> n >> x;

    // 전체 데이터 입력 받기
    for(int i=0; i<n; i++){
        int temp;
        cin >> temp;
        v.push_back(temp);
    }

    // 값이 [x, x] 범위에 있는 데이터의 개수 계산
    int count = countByRange(v, x, x);

    // 값이 x인 원소가 존재하지 않는다면
    if(count == 0) cout << -1 << '\n';
    // 값인 x가 존재한다면
    else cout << count << '\n';

    return 0;
}
728x90
반응형