반응형
https://www.acmicpc.net/problem/1920
이분탐색을 구현해보는 문제였습니다.
풀이방법
1. STL binary_search함수를 사용해 key값을 찾았다면 1을 아니라면 0을 출력하도록 합니다.
2. 직접 이분탐색을 구현하는 방법도 있습니다.
* 입출력이 많으므로 c와 동기화를 풀어줘야 시간초과가 나지 않습니다.
Code
1. STL 사용
#include <iostream>
#include <algorithm>
#include <vector>
#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;
int n,m;
vector <int> a;
int main(){
fastio;
cin >> n;
for(int i = 0,x; i < n; i++) { cin >> x, a.push_back(x); }
sort(a.begin(), a.end());
cin >> m;
for(int i = 0; i < m; i++){
int x;
cin >> x;
cout << binary_search(a.begin(),a.end(),x) << '\n';
}
}
2. 직접구현
#include <iostream>
#include <algorithm>
#include <vector>
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
int n,m,x;
int a[100001];
int binarySearch(int x){
int left = 0;
int right = n - 1;
while(left <= right){
int mid = (left + right) / 2;
if(a[mid] < x) left = mid + 1;
else if(a[mid] > x) right = mid - 1;
else return 1;
}
return 0;
}
int main(){
fastio;
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
sort(a, a + n);
cin >> m;
for(int i = 0; i < m; i++){
cin >> x;
cout << binarySearch(x) << '\n';
}
}
'Algorithm > Binary Search' 카테고리의 다른 글
(C++) - 프로그래머스(Programmers) : 입국심사 답 (0) | 2020.07.23 |
---|---|
(C++) - 프로그래머스(Programmers) : 예산 답 (0) | 2020.07.23 |
(Text) - 백준(BOJ) 15641번 : SUPER SUPER BINARY SEARCH DELUXE 2.5 ~ (0) | 2020.03.21 |
(C++) - 백준(BOJ) 13702번 : 이상한 술집 (0) | 2017.02.27 |
(C++) - 백준(BOJ) 2805번 : 나무 자르기 (0) | 2017.02.27 |