
메모리: 139992 KB, 시간: 256 ms
자료 구조, 정렬, 이분 탐색
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을 출력한다.
트러블슈팅은 따로 없었다. 개념을 정리할때 작성했던 코드 그대로를 구현할수 있다면 쉽게 풀수 있는 문제였다.
그래도 알아둬야하는건, 항상 sort하기!
생각보다 start, end 값을 정하는게 쉽지는 않았던것 같다. 익숙해지면 괜찮아 질것같다.
#https://www.acmicpc.net/problem/1920
#수 찾기
#1920
import sys
input = sys.stdin.readline
n = int(input())
n_list = list(map(int, input().split()))
m = int(input())
m_list = list(map(int, input().split()))
# print(n_list)
# print(m_list)
n_list.sort()
ans = [0] * m
for i in range(m):
target = m_list[i]
start = 0
end = n - 1
while start <= end:
mid = (start + end) // 2
if target == n_list[mid]:
ans[i] = 1
break
elif target < n_list[mid]:
end = mid - 1
elif target > n_list[mid]:
start = mid + 1
# print(ans)
for i in range(len(ans)):
print(ans[i])