알고리즘

<백준> 1920번 자바 알고리즘 [이분 탐색]

changha. 2022. 2. 8. 22:29
import java.util.*;


public class Main
{
    static int N, M;
    static int[] arr;
    
	public static void main(String[] args) {
		
	    Scanner in = new Scanner(System.in);
	    N = in.nextInt();
	    arr = new int[N];
	    // A 초기화
	    for(int i=0; i < N; i++){
	       arr[i] = in.nextInt();
	    }
	    Arrays.sort(arr); // 정렬 하기  
        
        M = in.nextInt();
       
        for(int j=0; j < M; j++){
            int low = 0;
            int high = N - 1;
            int m = in.nextInt();
            System.out.println(binarySearch(low, high, m));
        }


	}
	
	private static int binarySearch(int low, int high, int key){
	   int mid = (low + high) / 2;
	   if(low <= high){
	       // key 가 arr[mid] 보다 작을 때 
	       if(key < arr[mid]){
	           return binarySearch(low, mid - 1, key);
	       } // key 가 arr[mid] 보다 클 때 
	       else if (key > arr[mid]){
	           return binarySearch(mid + 1, high, key);
	       }
	       else { // 찾았으면 
	           return 1;
	       }
	   }
       // 못 찾았으면 
	   return 0;
	}
}

 



N => 정수 개수
A => N개 만큼 
M => 정수 개수
-> 이 수들이 A안에 존재 하는지 

if 존재 -> return 1
else -> return 0

mid = start + end / 2 => index 

key <-> arr[mid] 와의 관계