수 찾기 1920

LJM·2023년 2월 24일
0

백준풀기

목록 보기
115/259

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

해시셋으로 해도 되지만 다시 기억을 되살릴겸
이분탐색으로 풀었다 오랜만에 하니까 가물가물하네;;

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

public class Main
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        String[] input = br.readLine().split(" ");
        int[] arr = new int[N];
        for(int i = 0; i < N; ++i)
        {
            arr[i] = Integer.parseInt(input[i]);
        }

        Arrays.sort(arr);

        int M = Integer.parseInt(br.readLine());
        input = br.readLine().split(" ");
        int[] arrs = new int[M];
        for(int i = 0; i < M; ++i)
        {
            arrs[i] = Integer.parseInt(input[i]);
        }

        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < M; ++i)
        {
            if(true == find(N, arrs[i], arr))
                sb.append("1\n");
            else
                sb.append("0\n");
        }
        System.out.println(sb);
    }

    public static boolean find(int N, int target, int[] arr)
    {
        int left= 0;
        int right = N-1;
        int half = 0;
        while(left <= right)
        {
            half = (left + right)/2;

            if(arr[half] > target)
            {
                right = half-1;
            }
            else if(arr[half] < target)
            {
                left = half+1;
            }
            else if(arr[half] == target){
                return true;
            }
        }

        return false;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글