https://www.acmicpc.net/problem/1920
N = int(input())
A = list(map(int, input().split()))
M = int(input())
arr = list(map(int, input().split()))
for i in arr:
print(1 if i in A else 0)
in 연산을 사용해 매번 전체를 탐색하기 때문에 시간이 오래 걸린다.bisect 사용)
import bisect
N = int(input())
A = sorted(list(map(int, input().split())))
M = int(input())
arr = list(map(int, input().split()))
for i in arr:
idx = bisect.bisect_left(A, i)
if idx < len(A) and A[idx] == i: print(1)
else: print(0)
bisect 모듈을 사용해보았다.bisect_left(arr, num): 정렬된 arr에 대해, 값 num을 삽입했을 때 정렬 순서를 유지할 수 있는 가장 왼쪽 인덱스르 반환arr = [1, 2, 3, 4, 5]에 대해num = 2 -> bisect_left(arr, num) = 1num = 4 -> bisect_left(arr, num) = 3set 사용)
N = int(input())
A = set(map(int, input().split()))
M = int(input())
arr = list(map(int, input().split()))
for i in arr:
print(1 if i in A else 0)
A만 set로 변경해주었다.in 연산 (membership tesing)의 평균 시간 복잡도는 O(n)이다.in 연산의 평균 시간 복잡도는 O(1)이다.bisect 모듈은 이진 탐색 구현을 도와준다.bisect의 사용 예제는 다음과 같다. (출처: GPT o1)import bisect
lst = [1, 2, 4, 5, 7, 10] # list는 반드시 정렬돼있어야 한다!!
pos_left = bisect.bisect_left(lst, 3)
print("bisect_left:", pos_left) # bisect_left: 2
pos_right = bisect.bisect_right(lst, 5)
print("bisect_right:", pos_right) # bisect_right: 4
pos = bisect.bisect(lst, 5)
print("bisect:", pos) # bisect: 4
bisect.insort_left(lst, 3)
print("insort_left:", lst) # insort_left: [1, 2, 3, 4, 5, 7, 10]
bisect.insort_right(lst, 5)
print("insort_right:", lst) # insort_right: [1, 2, 3, 4, 5, 5, 7, 10]
bisect 미쳤네용