본문 바로가기
백준

[ 자바 :: 백준 10815 : 숫자카드]

by javaman 2022. 7. 28.

문제 풀이 시나리오

1. lower,uppper 인덱스로 이분탐색 메서드 구현

2. StringBuilder 로 1또는 0(공백으로 구분)출력

 

문제

 

풀이

package baekjoon;



import java.io.IOException;

import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

//상근이가 가지고 있는 수들을 배열에 저장
//두번째로 입력받은 수들이 배열에 있는지 이분탐색
//있으면 1 없으면 0 (공백으로 구분)
public class Main {
	//이분탐색 -> 시간초과 x
	public static boolean binarySearch(int[] ar, int n) {
		int leftIndex = 0;
		int rightIndex = ar.length-1;
		
		while(leftIndex <= rightIndex) {
			int midIndex = (leftIndex + rightIndex) /2 ;
			int mid = ar[midIndex];
			
			if( n < mid)
				rightIndex = midIndex - 1;
			else if( n > mid)
				leftIndex = midIndex + 1;
			else
				return true;
		}
		return false;
	}
    
	
	public static void main(String[] args) throws IOException {
		Scanner scan = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		
		
	
		int n = scan.nextInt();
		int[] arr = new int[n];
		for (int i = 0; i< n ;i++) {
			arr[i] = scan.nextInt();
		}
		
		Arrays.sort(arr);

		int m = scan.nextInt();
		
		for (int i = 0; i < m; i++) {
			
			int input = scan.nextInt();
			//이분탐색을 해서 해당 숫자가 있는 경우
			if (binarySearch(arr , input) ) {
				sb.append("1 ");
			}//이분 탐색을 해서 해당 숫자가 없는 경우
			else {
				sb.append("0 ");
			}
			
			
		}
		
	System.out.println(sb);
		
		
	}
}