본문 바로가기

[BOJ] - JAVA

[백준] 10815 : 숫자 카드 JAVA 풀이

 

1. N을 입력받음

2. N개의 수를 입력받고 int형 배열에 저장한 뒤 오름차순 정렬함

3. M을 입력받음

4. int배열과 찾아야 할 값인 target을 인자로 받아 이분탐색하는 함수를 작성함

     4-1. low = 0 , high = arr.length-1로 초기화함

     4-2. low<=high인 동안 아래 과정을 반복함

         4-2-1. mid = (low+high)/2를 계산함

         4-2-2. arr[mid] == target인 경우 1을 반환함

         4-2-3. 그렇지 않은 경우 low와 high의 값을 적절히 바꿔줌

    4-3. 4-2의 반복문이 끝날 때까지 함수가 1을 반환하지 않았다는 건,

            target이 arr에 없다는 뜻이므로 0을 반환함

5. 함수가 반환한 값을 출력함

 

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());
        int[] 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());
        
        for(int i=0;i<M;i++){
            int t = Integer.parseInt(st.nextToken());
            System.out.print(find(arr,t)+" ");
        }
    }
    
    static int find(int[] arr, int target){
        int low = 0;
        int high = arr.length-1;

        while(low<=high){
            int mid = (low+high)/2;
            if(arr[mid]==target){
                return 1;
            }
            else if(arr[mid]>target){
                high = mid-1;
            }
            else{
                low = mid+1;
            }
        }
        return 0;
    }
}