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;
}

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

[2805] 나무 자르기 C++  (0) 2022.02.13
[2512] 예산 C++  (0) 2022.02.09
[3273] 두 수의 합  (0) 2021.08.25
[단계별로 풀어보기] 백트래킹  (0) 2021.08.20
[단계별로 풀어보기] 브루트 포스  (0) 2021.08.16

+ Recent posts