APS/백준

[1920] 수 찾기 C++

문래동까마귀 2022. 2. 8. 00:47

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

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

- vector사용시 기본배열보다 시간이 더 오래걸리는 이유

 -> vector는 동적 배열로 공간이 부족할때마다 2배로 확장을 함

- cin/ cout이 printf보다 오래걸리는 이유

 -> scanf(0.798s)/ cin(2.051s)

 -> ios_base::sync_with_stdio(false); cin.tie(null); 추가시 속도향상(0.796s)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);

	int N, M;
	// vector<int> arr;
	int arr[100001];

	cin >> N;
	for (int i = 0; i < N; i++) {
		int num;
		cin >> num;
		arr[i] = num;
	}

	sort(arr, arr + N);

	cin >> M;

	for (int i = 0; i < M; i++) {
		int flag = 0;
		int searchNum;
		cin >> searchNum;
		int left = 0, right = N - 1;
		while (left<=right) {
			int middle = (left + right) / 2;
			if (searchNum == arr[middle]) {
				cout << "1" << "\n";
				flag = 1;
				break;
			}
			else if (searchNum < arr[middle])
				right = middle - 1;
			else
				left = middle + 1;
		}
		if(flag==0)
			cout << "0" << "\n";
	}

	return 0;
}