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);
}
}