문제 : https://www.acmicpc.net/problem/1920
1920번: 수 찾기
첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
www.acmicpc.net
이분 탐색 문제다.
이분 탐색 알고리즘을 구현하는 문제다.
- 행렬을 정렬한다.
- left, right를 각각 0, 길이-1로 한다.
- left <= right 인 동안 loop을 돌면서
- mid = (left+right ) /2를 한다.
- arr[mid]가 찾는 값보다 크면right = mid-1
- arr[mid]가 찾는 값보다 작으면 left = mid+1
- 찾는 값이면 위치 반환
- 반환을 못하면 l>r인 상황이 되어 loop탈출 -> -1 실패 반환
import sys
n = int(sys.stdin.readline())
a = [int(i) for i in sys.stdin.readline().split()]
m = int(sys.stdin.readline())
b = [int(i) for i in sys.stdin.readline().split()]
def binsearch(arr, x):
l, r = 0, len(arr)-1
while l <= r:
mid = (l+r)//2
if arr[mid] > x:
r = mid-1
elif arr[mid] < x:
l = mid+1
else:
return mid
return -1
a.sort()
for c in b:
tmp = binsearch(a, c)
if tmp != -1:
print(1)
else:
print(0)
'취준 > 백준' 카테고리의 다른 글
[백준][Python][2583][BFS] 영역 구하기 (0) | 2020.05.03 |
---|---|
[백준][Python][10026][BFS] 적록색약 (0) | 2020.05.01 |
[백준][Python][7562][BFS] 나이트의 이동 (0) | 2020.04.30 |
[백준][Python][2667][BFS] 단지번호붙이기 (0) | 2020.04.29 |
[백준][Python][1012][BFS] 유기농 배추 (0) | 2020.04.28 |