Home > Baekjoon > 수 찾기

수 찾기
1 초 128 MB 31.022%

출처 : 수 찾기

Solution
Python

import sys
input = sys.stdin.readline

def findInList(a, A, N):
    # 가장 작은 값, 가장 큰 값
    s, b = 0, N-1
    # 이분 탐색 알고리즘
    while s <= b:
        n = (s+b)//2
        # a를 찾으면 1 반환
        if A[n]==a: return 1
        # 현재 값이 a보다 크면, 큰 값을 현재 값의 -1
        elif A[n] > a: b = n-1
        # 현재 값이 a보다 작으면, 작은 값을 현재 값의 +1
        elif A[n] < a: s = n+1
    # 못 찾으면 0 반환
    return 0

if __name__ == '__main__':
    N = int(input())
    A = list(map(int, input().split()))
    M = int(input())
    a = list(map(int, input().split()))
    # 이진 탐색을 위해 A를 sort
    A.sort()
    # a 안의 각 값에 대해 이진 탐색 후 출력
    for i in a:
        print(findInList(i, A, N))

'''
if __name__ == '__main__':
    N = int(input())
    NA = list(map(int, input().split()))
    M = int(input())
    MA = list(map(int, input().split()))
    # 해시를 이용하기 위해 dict 형태로 변환
    A = {v:1 for v in NA}
    # try except 구문을 활용해 간단히 풀이
    for a in MA:
        try:
            if A[a]: print(1)
        except: print(0)
'''

문제

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보다 작다.

출력

M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.

예제 입력 1

5
4 1 5 2 3
5
1 3 7 9 5

예제 출력 1

1
1
0
0
1