BOJ

백준 1920. 수 찾기 [Python]

Hoo_Dev 2022. 4. 17. 21:11
 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

import sys

def binary_search(target, data):
    start = 0
    end = len(data) - 1

    while start <= end:
        mid = (start+end) // 2

        if data[mid] == target:
            return 1
        elif data[mid] < target:
            start = mid + 1
        else:
            end = mid - 1
    return 0



N = sys.stdin.readline()
check = list(map(int, sys.stdin.readline().split()))
M = sys.stdin.readline()
num = list(map(int, sys.stdin.readline().split()))
check.sort()
for i in num:
    print(binary_search(i, check))

처음엔 입력의 범위를 자세히 안보고 풀이를 진행했다가 시간초과가 난 문제.

for를 통한 반복으로 찾으면 시간초과가 나므로 이진탐색으로 탐색을 진행해야한다.

이진탐색은 정렬된 리스트로 진행해야 하므로 함수를 진행하기전에 리스트를 정렬시키고 함수를 진행.