algorithm/Sorting, Binary Search

[C++] BOJ 1920 수 찾기

gartenhh 2021. 5. 8. 02:16

문제

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>
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를 빼먹어서 원하는 결과가 나오지 않아서 당황했다.