문제
"맞았습니다"코드
#include <bits/stdc++.h>
using namespace std;
int n, m, num;
int arr[100010];
void binarySearch(int target){
int start = 0;
int end = n-1;
int mid = 0;
while(end >= start){
mid = (start+end)/2;
if(target == arr[mid]){
cout << 1 << '\n';
return;
}
else if (arr[mid] < target){
start = mid+1;
}
else{
end = mid-1;
}
}
cout << 0 << '\n';
return;
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i = 0; i < n; i++){
cin >> arr[i];
}
sort(arr, arr+n); // 이분탐색을 위해 미리 정렬
cin >> m;
while(m--){
cin >> num;
binarySearch(num);
}
return 0;
}
리뷰
이중 for문으로 검사하면 n, m둘다 10만개가 주어질 수 있기 때문에.
시간초과가 난다.
따라서 첫 번째 배열을 정렬 시키고, 두 번째 숫자가 들어올 때마다 이분 탐색시켰다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
하노이탑 이동 순서 백준 11729 c++ (0) | 2021.12.09 |
---|---|
곱셈 백준 1629번 c++ (0) | 2021.12.08 |
상범빌딩 백준 6593번 c++ (0) | 2021.12.08 |
나무 자르기 백준 2805 c++ (0) | 2021.12.06 |
토마토 백준 7569 c++ (0) | 2021.12.06 |