본문 바로가기
문제 풀이/백준(BOJ)

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

by 희조당 2021. 8. 3.
728x90

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


 문제 풀이

이분 탐색의 쉬운 문제이다.

이분 탐색 시에는 정렬이 되어야 한다는 점만 기억하면 된다!

 느낀 점

qsort로 정렬할 때는 틀렸다고 나와서 그냥 sort를 사용했는데 맞았다. 어떤 것이 잘못됐는지 모르겠다.

 코드

#include <iostream>
#include <algorithm>

using namespace std;

int n, m;
long long tmp;
long long arr[1000001];

int binary(int left, int right, int key) {
	int mid;
	while (left <= right) {
		mid = (left + right) / 2;
		if (key > arr[mid]) left = mid + 1;
		else if (key < arr[mid]) right = mid - 1;
		else return 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 >> tmp;
		cout << binary(0, n - 1, tmp) << "\n";
	}
}

댓글