데일리 커밋

[백준]

snape 2022. 1. 15. 23:43

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

 

첫 번째 시도!

 

시간오류나서 실패!

 

왜 오류일까를 한참 고민하다가 생각나는 것은 바로...

 

시간복잡도!!

 

이제는 문제 풀 때 알고리즘을 고려해서 풀어야겠다.

a = int(input())
a_1 = list(map(int,input().split()))
b = int(input())
b_1 = list(map(int,input().split()))
for i in b_1:
  if i in a_1:
    print(1)
  else:
    print(0)

 

두 번째 시도!

n = int(input())
n_list = list(map(int, input().split(' ')))
n_list.sort()

m = int(input())
targets = list(map(int, input().split(' ')))


def binary(target):
    left = 0
    right = n - 1

    while left <= right:
        mid = (left + right) // 2
        if n_list[mid] == target:
            return True

        if target < n_list[mid]:
            right = mid-1
        elif target > n_list[mid]:
            left = mid + 1


for i in range(m):
    if binary(targets[i]):
        print(1)
    else:
        print(0)