[Python] 백준 1920 수 찾기

     

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

     

    1920번: 수 찾기

    첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

    www.acmicpc.net

     

    문제

     

    N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.

     

    해결

     

    첫 번째 시도 : 웅? 쉬운데..? → 하지만 시간 초과

    import sys
    
    n = int(sys.stdin.readline())
    list_n = list(map(int, sys.stdin.readline().split()))
    
    m = int(sys.stdin.readline())
    list_m = list(map(int, sys.stdin.readline().split()))
    
    for i in list_m:
        if i in list_n:
            print(1)
        else:
            print(0)

     

     

    이분 탐색을 써야겠다! → 성공

    import sys
    
    n = int(sys.stdin.readline())
    n_list = list(map(int, sys.stdin.readline().split()))
    n_list.sort()
    
    m = int(sys.stdin.readline())
    targets = list(map(int, sys.stdin.readline().split()))
    
    for target in targets:
    
        left = 0
        right = n-1
    
        while left <= right:
            mid = (left + right) // 2
    
            if n_list[mid] == target:
                print(1)
                break
    
            elif n_list[mid] > target:
                right = mid -1
            
            else:
                left = mid + 1
        
        if left > right:
            print(0)

    'Algorithm > Sorting' 카테고리의 다른 글

    [Python] 백준 10825번 국영수  (0) 2023.10.27
    [Python] 백준 10867 중복 빼고 정렬하기  (0) 2022.06.02
    [Python] 백준 3273번 두 수의 합  (0) 2022.06.01

    댓글