파이썬 문제풀이
[백준 파이썬] 1920 수 찾기
냄비짱
2023. 8. 10. 06:41
728x90
📌문제 출처
백준 단계별 문제풀이 - 이분탐색
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개의 수들이 주어지는데, 이 수들
www.acmicpc.net
❓ 문제
❗ 풀이
- 이분탐색 활용
📗 풀이 코드
import sys
input = sys.stdin.readline
def binary_search(q,n):
sta,end = 0,n-1
mid = (sta+end)//2
while sta <= end:
if nums[mid] == q: # 찾는 숫자를 발견했을 때
flag = 1
return 1
if nums[mid] < q : # 찾는 숫자가 중간보다 뒤에 있을 때
sta = mid+1
mid = (sta+end)//2
else : # 찾는 숫자가 중간보다 앞에 있을 때
end = mid-1
mid = (sta+end)//2
return 0
n = int(input())
nums = sorted(list(map(int,input().split())))
_ = input()
questions = list(map(int,input().split()))
for q in questions:
print(binary_search(q,n))
📗 코드 해설
- 정렬된 리스트에서 탐색하는 범위를 계속 반으로 줄여나간다.
- mid를 기점으로 이보다 큰 곳에 위치하면 mid+1
- end의 범위를, 작은 곳에 위치하면 sta
- mid-1의 범위를 탐색한다.
- sta=mid=end인 순간까지 탐색한다. 이 때 mid = 찾는 숫자이면 성공
- 위 순간까지도 찾는 숫자가 없다면 end가 sta보다 작아지기 때문에 탐색 종료