오답노트
[이분탐색] BOJ 10816번 숫자 카드2 - 오답노트 본문
https://www.acmicpc.net/problem/10816
10816번: 숫자 카드 2
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
- 문제파악
배열에는 중복 가능한 N개의 요소가 주어진다. 그 이후에 입력되는 숫자들이 배열에 몇개가 있는지 출력하라.
- 나의 접근
배열에서 찾고싶은 정수가 있다면 처음 나타는 인덱스와 마지막에 나타나는 인덱스를 빼면 된다는 발상까지는 성공했으나 구현이 쉽지 않았다.
그런데 STL에 함수가 있었다...
이분탐색 힘들게 구현하지 말고 STL을 활용하자...
- 정답
STL 에 있는 upper_bound 함수는 정렬된 배열내에서 가장 첫번째에 위치한 인자로 입력된 값의 위치를 반환한다.
lower_bound 함수는 반대로 정렬된 배열내에서 가장 마지막에 위치한 인자로 입련된 값의 위치를 반환다.
#include "bits/stdc++.h"
using namespace std;
int arr[500005];
int n;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++) cin >> arr[i];
sort(arr, arr + n);
int m;
cin >> m;
while (m--)
{
int t;
cin >> t;
cout << upper_bound(arr, arr + n, t) - lower_bound(arr, arr + n, t) << ' ';
}
}
'C,C++ > 코딩테스트' 카테고리의 다른 글
[해시] BOJ 1620번 나는야 포켓몬 마스터 이다솜 (0) | 2022.06.10 |
---|---|
[해시] BOJ 7785번 회사에 있는 사람 (0) | 2022.06.10 |
[이분탐색] BOJ 1920번 수 찾기 (0) | 2022.06.09 |
[DP] BOJ 11051번 이항 계수 2 - 오답노트 (0) | 2022.06.08 |
[수학] BOJ 11050번 이항 계수 1 (0) | 2022.06.08 |