[BOJ 1920] 수 찾기
1) 문제 링크
https://www.acmicpc.net/problem/1920
2) 접근
이진 탐색을 구현해야 O(NlogM)으로 빨리 끝내버릴 수 있겠다고 생각했다. 그래서 입력받은 정수들을 오름차 순으로 정렬한 뒤 BinarySearch(num) 함수를 만들어 이진탐색을 돌렸다.
3) 풀이
#include <iostream>
#include <algorithm>
using namespace std;
int N, M;
int key;
long long A[100001];
// 이진탐색 함수
int BinarySearch(int num){
int s=0, e=N-1;
int mid;
while(s <= e){
mid = (s+e) / 2;
if(num == A[mid]) { return 1; }
else if(num > A[mid]) { s = mid + 1; }
else { e = mid - 1; }
}
return 0;
}
int main(void){
ios::sync_with_stdio(false);
cin.tie(NULL);
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 >> key;
cout << BinarySearch(key) << '\n';
}
return 0;
}
4) 피드백
처음 이 글을 작성했을 당시(올해 2월? 쯤)에는 이진탐색을 외워야겠다는 생각만 하고 있었다. 물론 외워서 활용할 줄 아는 것도 필수적이긴 하지만… <algorithm>
헤더에 lower_bound()
, upper_bound()
함수가 있다는 것도 기억하도록 하자.
Leave a comment