728x90
반응형
import sys
# 이분 탐색 알고리즘 함수
def binarySearch(originList, n, data): # 배열, 배열 길이, 찾을 값
start = 0
end = n - 1
while start <= end:
mid = (start + end) // 2
if originList[mid] == data:
return True
elif originList[mid] < data:
start = mid + 1
else:
end = mid - 1
return False
n = int(sys.stdin.readline())
originList = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
goodList = list(map(int, sys.stdin.readline().split()))
originList.sort() # 이분 탐색을 위한 정렬
originLen = len(originList) # 이분 탐색을 위한 배열 길이 구해놓기
for i in goodList:
if binarySearch(originList, originLen, i):
print('1')
else:
print('0')
정말 간단해 보이지만 시간 초과 때문에 쉽게 틀리곤 하는 문제다.
이 문제는 이분 탐색 알고리즘만 알면 아주 간단하게 풀 수 있다.
binarySearch() 함수가 이분 탐색 알고리즘을 구현한 함수이다. originList에 값이 있는지 확인할 때, binarySearch()를 사용해 주기만 하면 끝이다.
728x90
반응형
'Algorithm > Binary Search' 카테고리의 다른 글
[Baekjoon 3079 / Python / 골드5] 입국심사 (0) | 2024.09.29 |
---|---|
[Baekjoon 2110 / Python / 골드4] 공유기 설치 (0) | 2024.08.28 |
[Baekjoon 2805 / python / 실버2] 나무 자르기 (0) | 2024.03.25 |
[Baekjoon 9020 / python / 실버2] 골드바흐의 추측 (2) | 2024.03.22 |
[Baekjoon/JAVA] 백준 10815번 숫자 카드 (0) | 2023.07.01 |