알고리즘 문제

[C/C++ 백준 1920번] 수찾기 (Silver 4) (Class 2)

새파란 공대생 2020. 7. 26. 16:29

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개의 수들이 주어지는데, 이 수들이 A안��

www.acmicpc.net

이분 탐색 알고리즘을 처음 써 보았다. 생각보다 쓰기도 간편하고 직관적이었다. 쓸 줄만 알면 쉽게 풀 수 있는 문제같다.

코드는 다음과 같다.

 

#include <cstdio>
#include <algorithm>
using namespace std;
int main(void){
	int N, M, num, left, right, mid;
	scanf("%d", &N);
	int number[N];
	for(int i=0; i<N; i++){
		scanf("%d", &number[i]);
	}
	sort(number, number+N);
	scanf("%d", &M);
	for(int j=0; j<M; j++){
		scanf("%d", &num);
		left = 0;
		right = N-1;
		mid = (left+right)/2;
		while(left<=right){
			if(number[mid]<num)
				left = mid + 1;
			else if(number[mid]>num)
				right = mid - 1;
			else
				break;
			mid = (left+right)/2;
		}
		if(number[mid]==num)
			printf("1\n");
		else
			printf("0\n");
	}
	
}