본문 바로가기
알고리즘

백준_10815_숫자 카드(이분 탐색)

by 매화of사군자 2020. 2. 16.

https://www.acmicpc.net/problem/10815

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이가 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이

www.acmicpc.net

해결 방법

> 이분 탐색을 이용한다.(이분 탐색을 연습하는 단계이므로 이 방법을 추천함)

> 또는 첫번째 list를 set으로 받아 연산한다.

 

이분 탐색

https://seungbok3240.tistory.com/63

 

백준_2805_나무 자르기(이분 탐색)

https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의..

seungbok3240.tistory.com

코드(이분 탐색)

더보기

num = int(input())

a = list(map(intinput().split()))

num2 = int(input())

b = list(map(intinput().split()))

 

a.sort()

for i in b:

    flag = 0

    low, high = 0, num - 1

    while low <= high:

        mid = (low + high) // 2

        if a[mid] == i and flag == 0:

            flag = 1

            print(1end=" ")

            break

        elif a[mid] > i:

            high = mid - 1

        else:

            low = mid + 1

    if flag == 0:

        print(0end=" ")

코드(set이용)

더보기

num = int(input())

a = set(map(intinput().split()))

num2 = int(input())

b = list(map(intinput().split()))

 

for i in b:

    if i in a:

        print(1end" ")

    else:

        print(0end" ")

댓글