https://www.acmicpc.net/problem/10815
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
문제를 보고 엥? 너무 쉬운데 하고 풀었는데
import sys
n = int(sys.stdin.readline())
a = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
b = list(map(int, sys.stdin.readline().split()))
for i in range(len(b)):
if b[i] in a:
print(1, end= " ")
else:
print(0, end= " ")
당영히 시간초과
이 문제를 해결하기 위해서는 탐색 방법중 이분 탐색으로 해결해야하는 문제이다.
import sys
n = int(sys.stdin.readline())
a = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
b = list(map(int, sys.stdin.readline().split()))
a.sort()
for i in range(len(b)):
start = 0
end = n-1
flag = True
while start <= end:
mid = (start + end)//2
if a[mid] > b[i]:
end = mid - 1
elif a[mid] < b[i]:
start = mid + 1
else:
print(1 ,end = " ")
flag = False
break
if flag:
print(0,end= " ")
이렇게 해결하면 된다.
반응형
'알고리즘 공부 > 이진탐색' 카테고리의 다른 글
[백준] 2805번 나무 자르기 - 파이썬 (0) | 2022.04.15 |
---|---|
[백준] 12015번 가장 긴 증가하는 부분 수열 2 - 파이썬 (0) | 2022.04.14 |
[백준] 1197번 랜선 자르기 - 파이썬 (0) | 2022.04.12 |
이진 탐색 알고리즘 (0) | 2022.02.06 |
[백준] 10816번 숫자 카드 2 - 파이썬 (0) | 2021.08.19 |