백준 단계별로 풀어보기 [이분 탐색] 수 찾기
https://www.acmicpc.net/problem/1920
[풀이]
이진 탐색으로 find 배열의 수가 arr 배열에 존재하는지 검색하고, 존재하면 1을 존재하지 않으면 0을 출력한다.
[코드]
#include <iostream>
#include <string>
#include <algorithm>
int arr[100001];
int find[100001];
int binary_search(int as, int ae, int key) {
if (as > ae) {
std::cout << "0\n";
return 0;
}
int am = (as + ae) / 2;
if (arr[am] == key) {
std::cout << "1\n";
return am;
}
else if (arr[am] < key) {
return binary_search(am + 1, ae, key);
}
else {
return binary_search(0, am - 1, key);
}
}
int main() {
//이분 탐색
int n;
std::cin >> n;
for (int i = 0; i < n; i++) {
std::cin >> arr[i];
}
int m;
std::cin >> m;
for (int i = 0; i < m; i++) {
std::cin >> find[i];
}
std::sort(arr, arr + n);
//arr에 find 수가 존재하면 1, 없으면 0 출력.
for (int i = 0; i < m; i++) {
binary_search(0, n - 1, find[i]);
}
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[c++] 백준 1932 정수 삼각형 (0) | 2021.07.29 |
---|---|
[c++] 백준 1149 RGB 거리 (0) | 2021.07.29 |
[c++] 백준 2740 행렬 곱셉 (0) | 2021.07.28 |
[c++] 백준 1992 쿼드트리 (0) | 2021.07.27 |
[c++] 백준 2630 색종이 만들기 (0) | 2021.07.27 |