현재

[Java][BaekJoon][1920] 수 찾기(이분탐색법,binarySearch) 본문

알고리즘/백준

[Java][BaekJoon][1920] 수 찾기(이분탐색법,binarySearch)

AAAge 2024. 5. 19. 17:51

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

<이 문제에서 얻어가야 할 것>

이분탐색법 이론, 기본 알고리즘 작성, Arrays.binarySerach()

<힌트>

더보기

이분 탐색 코드 작성시 low값, high값, 미드값

<풀이코드>

더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static int[] arr;

    public static void main (String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        arr = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        for(int i = 0 ; i < N ; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        //이분탐색법을 사용하기 위해 한번 정렬
        Arrays.sort(arr);

        int M = Integer.parseInt(br.readLine());

        st = new StringTokenizer(br.readLine()," ");
        StringBuilder sb = new StringBuilder();
        for(int i = 0 ; i < M ; i++){

            if(binarySearch(Integer.parseInt(st.nextToken())) >= 0){
                sb.append("1").append('\n');
            } else {
                sb.append("0").append('\n');
            }

        }
        System.out.println(sb);
    }

    public static int binarySearch(int value){

        int low = 0;
        int high = arr.length - 1;


        while(low <= high){

            int mid = (low + high)/2;

            if( value < arr[mid] ){
                high = mid -1;
            }
            else if( value > arr[mid] ){
                low = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }
}