알고리즘/탐색

백준[10816] 숫자 카드 2

HJ39 2023. 3. 11. 15:01

이분 탐색을 살짝 응용한 문제인데

Cpp 라이브러리를 찾다가 이분탐색을 쉽게 사용하는 함수가 있었다.!

upper_bound 이분 탐색을 수행하여 원하는 값의 마지막 주소값을 반환
lower_bound 이분 탐색을 수행하여 원하는 값의 첫 번째 주소값을 반환

위 함수를 이용하면 이분탐색을 손쉽게 할 수 있다.

 

#include <bits/stdc++.h>

void numberCard2(){
    int N;
    scanf("%d",&N);
    
    vector<int> arrN;
    
    for(int i=0;i<N;i++){
        int n;
        scanf("%d",&n);
        arrN.push_back(n);
    }
    sort(arrN.begin(),arrN.end());
    
    int M;
    scanf("%d",&M);
    
    for(int i=0;i<M;i++){
        int m;
        scanf("%d",&m);
        printf("%d ",upper_bound(arrN.begin(), arrN.end(), m)-lower_bound(arrN.begin(), arrN.end(), m));
    }
    cout<<endl;
}

upper_bound 반환 값에서 lower_bound 반환 값을 빼면 중복된 개수를 구할 수 있다.

'알고리즘 > 탐색' 카테고리의 다른 글

백준[2805] 나무 자르기 (Swift)  (0) 2023.03.19
백준[1654] 랜선 자르기 (Swift)  (0) 2023.03.19
백준[10816] 숫자 카드 2 (Swift)  (0) 2023.03.19
백준[2805] 나무 자르기  (0) 2023.03.11
백준[1920] 수찾기  (0) 2023.03.11