백준

백준 10816번: 숫자 카드 2

10816번: 숫자 카드 2 (acmicpc.net)

 

10816번: 숫자 카드 2

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

www.acmicpc.net

 

Lower bound는 찾고자 하는 숫자이상의 값이 처음으로 나오는 인덱스 값을 반환하고
Upper bound는 찾고자 하는 숫자초과의 값이 처음으로 나오는 인덱스 값을 반환한다.

이분 탐색에서 배열은 항상 정렬된 상태여야 한다.

 

n,L,k,M = int(input()),list(map(int, input().split())),int(input()),list(map(int, input().split()))  
d = []  
L.sort()  
def upper_bound(s, e, d):  
while(e - s > 0):  
m = (s+e)//2  
if(L[m] <= d):  
s = m+1  
else:  
e = m  
return e

def lower_bound(s, e, d):  
while(e - s > 0):  
m = (s+e)//2  
if(L[m] < d):  
s = m+1  
else:  
e = m  
return e

for i in M:  
d.append(upper_bound(0, n, i) - lower_bound(0, n, i))  
print(*d)  

코드 참고

Lower bound, Upper bound (python) (velog.io)

[Python] BOJ 10816 - 숫자 카드 2 (lower bound, upper bound) (tistory.com)

'백준' 카테고리의 다른 글

백준 10989번: 수 정렬하기 3  (0) 2021.09.29
백준 2231번: 분해합  (0) 2021.09.29
백준 1476번: 날짜 계산  (0) 2021.07.13
백준 1475번: 방 번호  (0) 2021.07.09
백준 10814번: 나이순 정렬  (0) 2021.07.09