https://www.acmicpc.net/problem/10815
n = int(input())
arr = sorted(list(map(int,input().split())))
m = int(input())
targets = list(map(int,input().split()))
for target in targets:
s = 0
e = n - 1
flag = False
while s <= e:
m = (s + e) // 2
if target > arr[m]:
s = m + 1
elif target < arr[m]:
e = m - 1
else:
flag = True
break
if flag:
print(1, end=' ')
else:
print(0, end=' ')
이분탐색을 하지 않으면 시간초과에 걸릴 것이오...
처음에 arr[m]을 해야되는데 그냥 냅다 m으로 작성해버려서 헤맸던...ㅋㅋ
그리고 s와 e도 for문 안에 넣어줘야 한다.
n = int(input()) # 상근이 카드
arr1 = sorted(list(map(int,input().split()))) # 상근이 카드들
m = int(input()) # 확인 카드
arr2 = list(map(int,input().split())) # 확인 카드들
ans = [] # 정답
for find in arr2:
start, end = 0, n-1
flag = 0
while start <= end:
mid = (start + end) // 2
if arr1[mid] == find:
flag = 1
break
elif arr1[mid] < find:
start = mid + 1
else:
end = mid - 1
ans.append(flag)
print(*ans)
'백준' 카테고리의 다른 글
백준 1389. 케빈 베이컨의 6단계 법칙 (0) | 2024.10.29 |
---|---|
백준 11403. 경로 찾기 (0) | 2024.10.28 |
백준 2805. 나무 자르기 (0) | 2024.10.27 |
백준 22988. 재활용 캠페인 (0) | 2024.10.27 |
백준 3273. 두 수의 합 (0) | 2024.10.27 |