백준 4158 java : 이분탐색

magicdrill·2025년 10월 28일

백준 문제풀이

목록 보기
661/673

백준 4158 java : 이분탐색

입력형태를 Scanner 클래스에서 BufferedReader로 변경

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

public class bj4158 {
    static int[] sangguenCD;
    static int[] sunyoungCD;
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws IOException {
        while (inputData()) {
            System.out.println(findAnswer());
        }
        br.close();
    }

    public static boolean inputData() throws IOException {
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        if (N == 0 && M == 0) {
            return false;
        }
        sangguenCD = new int[N];
        sunyoungCD = new int[M];
        for (int i = 0; i < N; i++) {
            sangguenCD[i] = Integer.parseInt(br.readLine());
        }
        for (int i = 0; i < M; i++) {
            sunyoungCD[i] = Integer.parseInt(br.readLine());
        }

        return true;
    }

    public static int findAnswer() {
        int answer = 0;

        //이분탐색으로 sangguenCD배열의 원소가 sunyoungCD배열에 존재하는지 탐색
        //정렬한 채로 삽입된 상태

        for (int key : sangguenCD) {
            int left = 0, right = sunyoungCD.length - 1;

            while (left <= right) {
                int mid = (left + right) / 2;

                if (sunyoungCD[mid] == key) {
                    answer++;
                    break;
                } else if (sunyoungCD[mid] < key) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            }
        }

        return answer;
    }
}

0개의 댓글