본문 바로가기
백준

백준 이분탐색 - 1920번 : 수 찾기

by 맴썰 2022. 3. 2.

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


import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuilder sb = new StringBuilder();
		int n = Integer.parseInt(st.nextToken());
		st = new StringTokenizer(br.readLine());
		long[] arr = new long[n];
		for(int i=0; i<n; i++) {
			arr[i] = Long.parseLong(st.nextToken());
		}
		Arrays.sort(arr);
		st = new StringTokenizer(br.readLine());
		int m =Integer.parseInt(st.nextToken());
		st = new StringTokenizer(br.readLine());
		long[] ts = new long[m];
		for(int i=0; i<m; i++) {
			ts[i] = Long.parseLong(st.nextToken());
		}
		for(int i=0; i<m; i++) {
			long target = ts[i];
			int low = 0;
			int high = n-1;
			int mid ;
			boolean find = false;
			while(low<=high) {
				mid = (low+high)/2;
				if(arr[mid]==target) {
					sb.append("1\n");
					find = true;
					break;
				}
				else if(arr[mid]<target) {
					low = mid+1;
				}
				else if(arr[mid]>target) {
					high = mid-1;
				}
			}
			if(!find) sb.append("0\n");
		}
		bw.write(sb.toString());
		bw.close();
	}
}