728x90
반응형
쉬운 줄 알았는데..
시간 초과 오류가 났다!!
이유는? in탐색은 하나하나 다 하기에 시간 복잡도가 O(n)이 걸려 오래걸린다
따라서 시간 복잡도를 줄여야함
이진 탐색을 이용하자
이진 탐색이란?
중간값을 값과 비교하고 왼쪽 오른쪽 이동해가면서 구하는 거
이진 검색 알고리즘은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택하고 있다.
위키백과에서 가져온 정의
N=int(input())
str1=list(map(int, input().split(' ')))
str1.sort()
M=int(input())
str2=list(map(int, input().split(' ')))
arr = [0 for i in range(M)]
count=0
for i in str2:
l=0
r=N-1
while(l<=r):
mid=int((l+r)/2)
if str1[mid]==i:
arr[count]=1
break
elif str1[mid] < i:
l=mid+1
else:
r=mid-1
count+=1
print(*arr)
map함수란? 파이썬 내장 함수로 각 요소에 특정한 함수를 적용시킬 때 쓴다. 주로 여러 가지 값을 입력받을 때 사용함
print(*arr)은 *을 붙이며 , (쉼표)등을 빼고 원소만을 출력해준다
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
11054번 바이토닉 부분 수열 알고리즘 (0) | 2022.08.29 |
---|---|
백준 10816번 숫자 카드 2번 시간초과 Counter 내장함수 이용 (0) | 2022.08.20 |
백준 1620번 나는야 포켓몬 마스터 이다솜 파이썬 풀이 시간 초과 해결 (0) | 2022.08.19 |
백준 14425번 문자열 집합 문제 파이썬 풀이 시간 초과 (0) | 2022.08.19 |
백준 2231번 분해합 파이썬 풀이 (0) | 2022.08.01 |