백준/이분탐색

[백준 2776번 / C++] 암기왕

배발자 2022. 1. 26. 10:06
반응형

1. 수첩 1에 적혀있는 수들을 오름차순으로 정렬. 

2. 이분탐색을 통해서 해당하는 값이 있으면 1 출력. 없으면 0 출력

 

* unordered_map 을 통해서도 이 문제를 해결할 수 있습니다. 

 

 

<unordered_map> 자료구조

자료구조" data-og-description="*헤더로 을 갖는다. 은 key 와 value 의 쌍으로 이루어진 균형 이진 트리이다. key 를 기준으로 사전순으로 정렬되어 있기 때문에 검색 속도가 빠르다. 바로 map 의 쓰임을

baebalja.tistory.com

<이분탐색> 

#include <iostream>
#include <map>
#include <unordered_map>
#include <algorithm>
using namespace std; 

int main() {
	ios_base::sync_with_stdio(0); 
	cin.tie(0); 
	cout.tie(0); 
	int t; cin >> t; 
	while (t--) {	
		int n, m;
		cin >> n;
		vector <int> v1(n, 0);		
		for (int i = 0; i < n; i++) cin >> v1[i];
		sort(v1.begin(), v1.end());
		cin >> m; int temp; 
		for (int i = 0; i < m; i++) {
			cin >> temp; 
			int l = 0; int h = v1.size() - 1;
			int mid = 0;
			while (l <= h) {
				mid = (l+h) /2;
				if (v1[mid] == temp) {
					cout << 1 << "\n";
					break;
				}
				else if (v1[mid] < temp)l = mid + 1;
				else h = mid - 1;
			}
			if (v1[mid] != temp)cout << 0 << "\n";		
		}		
	}
}

<unordered_map>

#include <iostream>
#include <map>
#include <unordered_map>
#include <algorithm>
using namespace std; 

int main() {
	ios_base::sync_with_stdio(0); 
	cin.tie(0); 
	cout.tie(0); 
	int t; cin >> t; 
	while (t--) {

		unordered_map <int, int> map;
		int n, m;
		cin >> n;
		for (int i = 0; i < n; i++) {
			int c; cin >> c;
			map[c] = 1;
		}
		cin >> m; 
		for (int i = 0; i < m; i++) {
			int c; cin >> c; 
			if (map[c] == 1)cout << 1 << "\n";
			else cout << 0 << "\n"; 
		}

	}
}
 

2776번: 암기왕

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

www.acmicpc.net

 

반응형