이분 탐색을 살짝 응용한 문제인데
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 |