반응형
문제
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
출력
M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.
left <= right
부등호 들어가야 됨 0~0 짜리도 처리해야 하므로
#include <iostream>
#include <vector>
#include<queue>
#include <string>
#include<stack>
#include<cmath>
#include <map>
#include<algorithm>
using namespace std;
vector<int> vec;
vector<int> res;
bool flag = false;
void search(int left, int right, int t)
{
if (left <= right)
{
int mid = (left + right) / 2;
if (vec[mid] == t)
{
flag = true;
return;
}
else if (vec[mid] < t)
{
search(mid + 1, right, t);
}
else
{
search(left, mid - 1, t);
}
}
}
int main() {
int N;
cin >> N;
for (int i = 0; i < N; i++)
{
int a;
cin >> a;
vec.push_back(a);
}
int M;
cin >> M;
for (int i = 0; i < M; i++)
{
int b;
cin >> b;
res.push_back(b);
}
sort(vec.begin(), vec.end());
for (int i = 0; i < M; i++)
{
int target = res[i];
flag = false;
search(0, N, target);
if (!flag)
{
cout << 0 << "\n";
}
else
{
cout << 1 << "\n";
}
}
}
반응형
'Algorithm' 카테고리의 다른 글
[이분 탐색 단계] 백준 1654번 랜선 자르기 (0) | 2020.10.02 |
---|---|
[이분 탐색 단계] 백준 10816번 숫자 카드 2 (0) | 2020.10.02 |
[분할 정복 단계] 백준 2749번 피보나치 수 3 (0) | 2020.10.01 |
[분할 정복 단계] 백준 11401번 이항 계수 3 (0) | 2020.10.01 |
[분할 정복 단계] 백준 2740번 행렬 곱셈 (0) | 2020.10.01 |