PS/정렬 알고리즘[Sort]

백준 2776 암기왕(c++)

SeungbeomKim 2022. 7. 18. 12:11

https://www.acmicpc.net/problem/2776

 

2776번: 암기왕

연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며,

www.acmicpc.net

<코드>

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

int main()
{
	vector<int>v1;
	vector<int>v2;
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		
		for(int i=0;i<n;i++)
		{
			int a;
			cin>>a;
			v1.push_back(a);
		}
		int m;
		cin>>m;
		
		for(int i=0;i<m;i++)
		{
			int b;
			cin>>b;
			v2.push_back(b);
		}
		sort(v1.begin(),v1.end());
		for(int i=0;i<v2.size();i++)
		{
			if(binary_search(v1.begin(),v1.end(),v2[i])) cout<<1<<'\n';
			else cout<<0<<'\n';
		}
		v1.clear();
		v2.clear();
	}
}

<풀이과정>

이 문제는 이분 탐색으로 풀었다. 

정렬된 배열(sort)의 원소가 존재하는지 찾을 수 있는 알고리즘이다. 

검사할 때 마다 계속 탐색범위는 절반씩 줄어든다 

ex) 100개의 원소를 찾을 때, 첫 번째는 100번 검사 .. 두 번째는 50번 검사.

시간 복잡도 : O(log N)

마지막으로 중요한 부분인데, 벡터 배열의 원소들을 제거(clear)해주어야 다음 테스트 케이스에서도 이분탐색 역할을 수행할 수 있다. 벡터의 원소가 존재한다면 이전 케이스에서 진행했던 이분탐색이 같이 진행되기 때문이다. 

'PS > 정렬 알고리즘[Sort]' 카테고리의 다른 글

백준 11652 카드(c++)  (0) 2022.08.19
백준 2805 나무 자르기(c++)  (0) 2022.07.18
백준 1015 수열 정렬(c++)  (0) 2022.07.17
18870 좌표 압축(c++)  (0) 2022.07.13
백준 20291 파일 정리(c++)  (0) 2022.07.12