백준 10815 숫자카드

leejihun·2022년 5월 20일
0

알고리즘

목록 보기
2/50

이중 for문을 사용하여 ans를 체크했다가 시간제한에 걸렸다.
따라서 card 벡터를 정렬하고 이분탐색으로 해결

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

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

	int N = 0, M = 0;

	cin >> N;
	vector<int>card(N, 0);
	for (int i = 0; i < N; i++)
    {
		cin >> card[i];
    }
        
	sort(card.begin(), card.end());

	cin >> M;

	vector<int>check(M, 0);
	vector<int>answer(M, 0);

	for (int i = 0; i < M; i++) 
    {
		cin >> check[i];
		int low = 0;
		int high = N - 1;
        
		while (low <= high) 
        {
			int mid = (low + high) / 2;
            
			if (card[mid] == check[i]) 
            {
				answer[i]++;
				break;
			}
            
			else if (card[mid] < check[i])
				low = mid + 1;
            
			else if (card[mid] > check[i])
				high = mid - 1;
		}
	}
	for (int i = 0; i < M; ++i)
		cout << answer[i] << " ";
}
profile
U+221E

0개의 댓글