[C++]백준10816번 숫자 카드2

less than 1 minute read

오늘은 백준10816번 숫자 카드2 문제를 풀어보도록 하자. 이분탐색 문제로 upper_bound, lower_bound로 원하는 값을 제외한 값을 구해준다.

위 함수들은 algorithm 라이브러리의 함수로 이분탐색 기반이다.

문제는 다음과 같다.

                               [접근법]

  1. upper,lower_bound함수로 원하는 num값 이상, 미만의 갯수를 구해준다.
  
  2. 그 후 두 값을 빼면 num의 갯수만 나오므로 손쉽게 구할 수 있다.
                                     [코드]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int>arr;
int N, num, i = 0;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> num;
		arr.push_back(num);
	}
	sort(arr.begin(), arr.end());
	cin >> N;
	while (N--) {
		cin >> num;
		cout << upper_bound(arr.begin(), arr.end(), num) - lower_bound(arr.begin(), arr.end(), num) << ' ';
	}
}