문제
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
코드
#include<iostream>
#include<algorithm>
using namespace std;
int n, A[100001], m, num;
int search(int num) {
int lt = 0; int rt = n;
int mid;
while (lt <= rt) {
mid = (lt + rt) / 2;
if (num == A[mid]) return 1;
if (num > A[mid]) lt = mid + 1;
else rt = mid - 1;
}
return 0;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
for (int i = 0; i < n; i++) cin >> A[i];
sort(A, A + n);
cin >> m;
while (m--) {
cin >> num;
cout << search(num)<<'\n';
}
}
풀이방법
이분탐색을 이용한다.
고민과정
m개의 수를 입력받을 때 배열에 입력받으려다가 굳이 배열을 만들 필요가 없다는 것을 깨달았다. 급하게 풀다가 sort를 빼먹어서 원하는 결과가 나오지 않아서 당황했다.
'algorithm > Sorting, Binary Search' 카테고리의 다른 글
[C++] BOJ 1026 보물 (0) | 2022.01.12 |
---|---|
[C++] BOJ 11656 접미사 배열 (0) | 2022.01.12 |
[C++] BOJ 10815 숫자 카드 (0) | 2021.05.08 |
[C++] BOJ 11399 ATM (0) | 2021.05.08 |
[C++] BOJ 16401 과자 나눠주기 (0) | 2021.05.08 |