[Python] BOJ 1920 - 수 찾기(Binary Search)

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개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수들의 범위는 int 로 한다.

www.acmicpc.net

분류에 이분 탐색이라 되어 있어서 열심히 이분 탐색을 공부해서 풀었다.

import sys
input = sys.stdin.readline
n = int(input())
L = list(map(int, input().split()))
m = int(input())
mL = list(map(int, input().split()))
L.sort()

def binarySearch(a, key):
    low = 0
    high = len(a) - 1
    while low <= high:
        mid = (low + high) // 2
        if a[mid] > key:
            high = mid - 1
        elif a[mid] < key:
            low = mid + 1
        else:
            return 1
    return 0

for i in mL:
    print(binarySearch(L, i))
    

맞은 사람들코드가 150B내외인데 나는 450정도가 나와서 뭐지 하고 봤는데, 그냥 set을 사용해 바로 풀어버리면 되는 문제였다.

(현타 오네;)


n, L, m = input(), set(input().split()), input()
for i in input().split():
    if(i in L):
        print(1)
    else:
        print(0)
        
728x90
반응형
TAGS.

Comments