C++/백준 코딩테스트 풀이 C++

10816 C++ 숫자카드2

jjiing 2022. 8. 12. 13:34

처음에 해당하는 값을 count 해주는 방식으로 풀이했는데 시간초과가 계속 떴다.

결국 upper_bound와 lower_bound를 이용해 해결했다.

 

1. N개의 숫자들을 sort로 오름차순으로 정렬시켜준다.

2. upper_bound - lower_bound를 통해 값을 찾는다.

 

upper_bound : 찾으려는 원소보다 큰 숫자가 처음 나오는 위치 반환

lower_bound : 찾으려는 원소가 처음 나오는 위치 반환

 

(시간초과 문제)1. 

ios::sync_with_stdio(false);
cin.tie(NULL);

추가

 

2. cout => printf

 

 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int N, M;
	vector<int> vec;

	cin >> N;
	for (int i = 0; i < N; i++)
	{
		int input; cin >> input;
		vec.push_back(input);
	}
	sort(vec.begin(), vec.end());

	cin >> M;
	for (int i = 0; i < M; i++)
	{
		int input; cin >> input;
		int answer = upper_bound(vec.begin(), vec.end(), input) - lower_bound(vec.begin(), vec.end(), input);
		printf("%d ", answer);
		
	}
}