문제

 

 

풀이

선형탐색(Linear Search)을 이용하면 시간초과가 발생하기 때문에 이분탐색(Binary Search)을 통해 해결하였습니다.

#include <iostream>
#include <algorithm>

using namespace std;

int arr[100001];

void binary_search(int list[], int key, int right) {
	int left = 0;
	int middle;

	while (left <= right) {
		middle = (left + right) / 2;

		if (key == list[middle]) {
			cout << "1\n";
			return;
			}
		else if (key > list[middle])
			left = middle + 1;
		else if (key < list[middle])
			right = middle - 1;
	}

	cout << "0\n";
	return;
}

int main() {
	int n, m, num;

	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	cin >> n;

	for (int i = 0; i < n; i++)
		cin >> arr[i];
		
	sort(arr, arr + n);

	cin >> m;

	for (int i = 0; i < m; i++) {
		cin >> num;

		binary_search(arr, num, n - 1);
	}

	return 0;
}

'백준 > 기타' 카테고리의 다른 글

4949번: 균형잡힌 세상 [C++]  (0) 2023.04.10
2164번: 카드2 [C++]  (0) 2023.04.10
11866번: 요세푸스 문제 0 [C++]  (0) 2023.04.06
7568번: 덩치 [C++]  (0) 2023.04.06
11050번: 이항 계수 1 [C++]  (0) 2023.04.06

+ Recent posts