Algorithm

[BoJ][Python] ์•”๊ธฐ์™•

jihuSunbae 2024. 9. 2. 13:15

๋ชฉ์ฐจ

    ๐Ÿซก Overview

    ์ฒด๊ฐ ๋‚œ์ด๋„: โ˜…โ˜†โ˜†โ˜†โ˜†

    ์†Œ์š”์‹œ๊ฐ„: 

    ๋ฌธ์ œ ๋ ˆ๋ฒจ:  ์‹ค๋ฒ„4 / ๋ฌธ์ œ ์œ ํ˜•: ์ด๋ถ„ํƒ์ƒ‰
    ํ’€์ด ์ƒํƒœ:  ์Šค์Šค๋กœ ํ•ด๊ฒฐ
    ์ถ”ํ›„: ์™„๋ฒฝ ์ดํ•ด

     


    ๋ฌธ์ œ ๋งํฌ

    https://www.acmicpc.net/problem/2776

    ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„

    ๋”๋ณด๊ธฐ
    """
    ๋ฌธ์ œ: ์ˆ˜์ฒฉ2์— ์žˆ๋Š” ๋ชจ๋“  ์ˆ˜ ๋“ค์ด ์ˆ˜์ฒฉ 1์— ์žˆ๋Š”์ง€ ์ฐพ๊ธฐ
    output: ์žˆ์œผ๋ฉด 1, ์—†์œผ๋ฉด 0
    
    ## ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์™„์ „ ํƒ์ƒ‰
    - ์ˆ˜์ฒฉ 2์— ์žˆ๋Š” ๋ชจ๋“  ์ˆ˜๋“ค์— ๋Œ€ํ•ด์„œ, ์ˆ˜์ฒฉ 1์˜ ์ˆซ์ž๋“ค๊ณผ ์ˆซ์ฐจ ๋น„๋ฃŒ
    - O(M*N) = O(1,000,000* 1,000,000) => ์‹œ๊ฐ„ ์ดˆ๊ณผ
    
    ์ด๋ถ„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ ์‹œ
    - ์ˆ˜์ฒฉ 1์— ์žˆ๋Š” ์ˆซ์ž ์ •๋ ฌ O(NlogN)
    - ์ˆ˜์ฒฉ 1์˜ ๋ฐ์ดํ„ฐ ์…‹์—์„œ ์ˆ˜์ฒฉ 1์˜ 1๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ฐพ๊ธฐ: O(logN)
    - ์ˆ˜์ฒฉ 2์˜ ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์ฐพ๊ธฐ : O(M*logN) =  10**6 x 6*log10
      - 18,000,000 => ์•ฝ 2์ฒœ๋งŒ ์—ฐ์‚ฐ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    """

     

    ๋‚˜์˜ ์ฝ”๋“œ

    ๋”๋ณด๊ธฐ
    T = int(input()) # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜
    
    for _ in range(T):
        N = int(input()) # ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜ 1 <= N <= 1,000,000
        N_lst = list(map(int, input().split()))
        M = int(input()) # ์ˆ˜์ฒฉ 2์˜ ์ •์ˆ˜ ๊ฐœ์ˆ˜: 1 <= N <= 1,000,000
        M_lst = list(map(int, input().split()))
    
    
        def binary_search(target, N_lst):
            left, right = 0,len(N_lst)-1
    
            while left<=right:
                mid = (left+right)//2
                #print('left mid right :', left, mid, right)
                if N_lst[mid] == target:
                    #print("ํƒ€๊ฒŸ์„ ์ฐพ์Œ")
                    return 1
                elif N_lst[mid] < target:
                    #print("target์ด mid ๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ ์˜์—ญ์— ์žˆ์Œ, left๋Š” ")
                    left = mid + 1
                else:
                    #print("target์ด mid ์™ผ์ชฝ ์˜์—ญ์— ์žˆ์Œ ")
                    right = mid - 1
            return 0
    
        # ๋ฆฌ์ŠคํŠธ ์ •๋ ฌ
        N_lst.sort()
    
        # ์š”์†Œ ์ฐพ๊ธฐ
        result = []
        for m in M_lst:
            result.append(binary_search(m, N_lst)) # ์žˆ์œผ๋ฉด True, ์•„๋‹ˆ๋ฉด false
        print('\n'.join(map(str, result)))

     


     

     

    #๋ฐฑ์ค€ #์ฝ”๋”ฉํ…Œ์ŠคํŠธ #์•Œ๊ณ ๋ฆฌ์ฆ˜ #python #ํŒŒ์ด์ฌ