Algorithm

[BAEKJOON] 10815번 : 숫자 카드 (JAVA)

멍목 2023. 4. 5. 00:45
반응형

- 알고리즘 분류 : 이분 탐색(이진 탐색)

- 사용 언어 : JAVA

- 문제 요점

    - 일반적인 이분탐색 알고리즘을 이용한 문제.

 

 

소스 설명은 주석을 참고해주세요.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    static int[] myCard;

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

        int N = Integer.parseInt(br.readLine());
        myCard = new int[N];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i<N; i++)  myCard[i] = Integer.parseInt(st.nextToken());
        Arrays.sort(myCard);        // 오름차순 정렬

        int M = Integer.parseInt(br.readLine());
        int[] targetCard = new int[M];
        st = new StringTokenizer(br.readLine());
        for(int i=0; i<M; i++)  targetCard[i] = Integer.parseInt(st.nextToken());

        StringBuilder sb = new StringBuilder();
        for(int target : targetCard) {
            boolean result = BinarySearch(0, myCard.length-1, target);
            if(result)  sb.append("1 ");
            else        sb.append("0 ");
        }

        System.out.println(sb);
    }

    // 이진 탐색(이분 탐색)
    static boolean BinarySearch(int start, int end, int target) {
        if(start > end)     return false;
        int mid = (start+end) / 2;

        if(myCard[mid] == target)   return true;
        else if(myCard[mid] > target)   return BinarySearch(start, mid-1, target);
        else    return BinarySearch(mid+1, end, target);

    }

}
반응형