알고리즘 문제(SOL)

[백준/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

Problem

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

조건

  • 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다.
  • 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.

SOL

이분탐색의 간단한 예제이다.

#binary search
import sys
input = sys.stdin.readline
N = int(input().rstrip())
target=list(map(int,input().split()))
M= int(input().rstrip())
find=list(map(int,input().split()))

target.sort()
def binary_search(n):
    lo =0
    high=N-1
    while lo<=high:
        mid= (lo+high)//2
        if n>target[mid]:
            lo=mid+1
            continue
        if n<target[mid]:
            high=mid-1
            continue
        if n==target[mid]:
            return 1
    return 0


for i in range(M):
    print(binary_search(find[i]))