10816 : 숫자 카드 2

서희찬·2022년 1월 25일
0

백준

목록 보기
97/105

문제

코드

from bisect import bisect_left, bisect_right 

def findRange(a,left_value,right_value):
    right_idx = bisect_right(a,right_value)
    left_idx = bisect_left(a,left_value)
    return right_idx - left_idx 

n = int(input())
arr1 = list(map(int,input().split())) 
arr1.sort()
m = int(input())
arr2 = list(map(int,input().split())) 

for find in arr2:
    print(findRange(arr1,find,find),end=" ")

해설

이진탐색을 어떻게 사용해야할지 감이 안잡혀 풀지 못한 문제였다
그런데.. bisect_left,right를 배우고 이진 탐색으로 수의 범위 사이에 있는수의 갯수를 찾거나 같은 수의 갯수를 찾을 수 있는 것을 알아내서 적용해보니 풀렸다
뿌듯뿌듯-!

바이색섹를 이용한 이진 탐색을 통해 내가 찾는값의 가장왼쪽 인덱스와 가장 오른쪽 인덱스를 빼주면 찾는 값의 개수를 반환해주게 findRange함수를 짜줬다

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글