기타/코딩테스트
[Python] 백준 1920번 - 수 찾기
lazy man
2023. 3. 24. 21:59
1. 문제정보
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
2. 해결전략
탐색에 관련된 문제로 자연수의 개수는 10만개이고, 범위는 정수형 범위입니다. 단순 이중 포문의 경우 최대 100억회(10만 x 10만)를 수행하기 때문에 시간 초과가 발생할 것입니다. 다른 방법으로는 계수 정렬 후 인덱스로 접근하려고 했지만 범위가 정수형 범위이기 때문에 역시 무리라고 판단했습니다.
위와 같은 이유로 이중 탐색으로 구현했으며 이중 탐색의 경우 정렬된 리스트가 전제 조건이기 때문에 주의해야 합니다.
3. 코드
import sys
n = int(input())
n_array = list(map(int, input().split()))
n_array.sort()
m = int(input())
m_array = list(map(int, input().split()))
def binary_search(arr, target, start, end):
if start > end:
return None
mid = (start + end) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return binary_search(arr, target, start, mid-1)
else:
return binary_search(arr, target, mid+1, end)
for i in m_array:
if binary_search(n_array, i, 0, len(n_array)-1) == None:
print(0)
else:
print(1)