반응형

문제

https://www.acmicpc.net/problem/1920


가장기본적인 이분탐색이다.

각단계마다 반씩 줄어들어서 logN만큼의 시간이 소요된다.

A를 정렬하고 각 수가 주어질때마다 A의 중앙값보다 작다면 앞에서 크다면 뒤에서 다시 

이분탐색을 시행한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys
 
def binary_search(start,end,M):
    if start>end:
        return 0
 
    mid=(start+end)//2
 
    if A[mid]==M:#같다면 서치종료
        return 1
    elif A[mid]>M:#M이 중앙값보다 작다면 앞에서 비교
        return binary_search(start,mid-1,M)
    else:#크다면 뒤에서 비교
        return binary_search(mid+1,end,M)
 
 
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=sorted(A)#A정렬
for i in range(M):
    if binary_search(0,N-1,B[i]):
        print(1)
    else:
        print(0)
cs





반응형

'알고리즘(python) > 탐색' 카테고리의 다른 글

[Python]이분탐색 백준 1654  (0) 2020.01.31
[Python]이분탐색 백준 10816  (0) 2020.01.31
[Python]백트래킹 백준 14889  (0) 2020.01.07
[Python]백트래킹 백준 2580  (0) 2020.01.06
[Python]백트래킹 백준 9663  (0) 2020.01.06
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기