본문 바로가기
IT/알고리즘

백준 - 10815번

by Sungjun_ 2020. 11. 24.

문제

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

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

 


코드

import sys

def com(a, b):
    for i in range(len(b)):
        key = b[i]
        pl = 0
        pr = len(a) - 1
        while True:
            pc = (pl + pr) // 2
            if a[pc] == key:
                print(1, end=' ')
                break
            elif a[pc] < key:
                pl = pc + 1
            else:
                pr = pc - 1

            if pl > pr:
                print(0, end=' ')
                break


N = int(input())
num = list(map(int, sys.stdin.readline().rstrip().split()))
M = int(input())
ex = list(map(int, sys.stdin.readline().rstrip().split()))

num.sort()
com(num, ex)

 

먼저  가지고 있는 카드 배열인 num을 파이썬의 sort로 정렬시켜줬습니다.

 

그 다음 com함수를 이용해서 이진탐색을 실행해 수를 찾으면 1을 못찾으면 0을 출력하게했습니다.

pl은 배열의 시작 값이고 pr은 배열의 끝값으로 num 배열에서 값을 찾는 것이기 때문에 len(a) - 1로 설정했습니다.

'IT > 알고리즘' 카테고리의 다른 글

백준 - 1764번  (0) 2020.11.25
백준 - 10610번  (0) 2020.11.25
알고리즘 - 셸 정렬  (0) 2020.11.24
알고리즘 - 이진 삽입 정렬  (0) 2020.11.23
알고리즘 - 단순 삽입 정렬  (0) 2020.11.23

댓글