본문 바로가기
Algorithm/그리디

[백준] 1920번 : 수 찾기 (C++)

by 루시킴 2021. 9. 21.

https://www.acmicpc.net/problem/1920

 

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>
#include <cstdio>
using namespace std;

int N, M;
int n;
int arr[100000];

int solve(int n) {
	int start = 0;
	int end = N-1;
	while (start <= end) {	
		int mid = (start + end) / 2;
		if (arr[mid] == n) return 1;
		else if (n < arr[mid]) end = mid - 1;
		else start = mid + 1;
	}
	return 0;
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}
	sort(arr, arr + N);
	cin >> M;
	for (int i = 0; i < M; i++) {
		cin >> n;
		cout << solve(n) << "\n";
	}
}

댓글