백준

백준 1920 수 찾기 (자바, 파이썬)

MC류짱 2022. 12. 21. 23:10

풀이 및 해설(주석) [자바]

import java.io.*;
import java.util.*;

public class Main {
    public static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(bf.readLine());
        int[] arr1 = new int[N];

        StringTokenizer st = new StringTokenizer(bf.readLine());
        for (int i = 0; i < N; i++) {
            arr1[i] = Integer.parseInt(st.nextToken());
        }

        int M = Integer.parseInt(bf.readLine());
        int[] arr2 = new int[M];

        st = new StringTokenizer(bf.readLine());
        for (int i = 0; i < M; i++) {
            arr2[i] = Integer.parseInt(st.nextToken());
        }

        // binarySearch를 위해 arr1을 정렬
        Arrays.sort(arr1);

        for (int i = 0; i < M; i++) {
            int nowNum = arr2[i];
            // binarySearch를 통해 인덱스가 0이상이면 1
            if (Arrays.binarySearch(arr1, nowNum) >= 0) {
                sb.append("1");
                sb.append("\n");
            // -정수가 나온 경우 배열에 없다는 의미이므로 0
            }else {
                sb.append("0");
                sb.append("\n");
            }
        }
        System.out.println(sb);
    }
}

 

풀이 [파이썬]

import sys;

def solve(start, end, num):
    if start >= end:
        print(0)
        return
    mid = (start+end) // 2
    if arr1[mid] == num:
        print(1)
        return

    if arr1[mid] < num:
        solve(mid+1, end, num)
    else:
        solve(start, mid, num)


if __name__ == '__main__':
    N = int(sys.stdin.readline().strip())
    arr1 = list(map(int, sys.stdin.readline().strip().split()))

    M = int(sys.stdin.readline().strip())
    arr2 = list(map(int, sys.stdin.readline().strip().split()))

    arr1.sort()

    for num in arr2:
        solve(0, N, num)